前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >牛和 John

牛和 John

作者头像
枫叶丹
发布2024-06-04 11:24:19
770
发布2024-06-04 11:24:19
举报
文章被收录于专栏:C++

 纯模拟题,先定义可能需要的变量

int a[12][12], cx, cy, fx, fy; // 障碍物, 牛横纵, John横纵 char map; // 地图 int move_s; // 统计移动次数 int mf, mc; // John的移动方向, 牛的移动方向(0上 1右 2下 3左) int step; // 一步一步走 int turn; // 转弯 

首先输入地图

代码语言:javascript
复制
for (int i = 1; i <= 10; i++)
	{
		for (int j = 1; j <= 10; j++)
		{
			cin >> map; // 输入地图
			if (map == '*') // 障碍物
			{
				a[j][i] = -1;
			}
			if (map == 'C') // 记录牛的初始位置
			{
				cx = j;
				cy = i;
			}
			if (map == 'F') // 记录John的初始位置
			{
				fx = j;
				fy = i;
			}
		}
	}

 现在开始模拟

代码语言:javascript
复制
	while ((cx != fx || cy != fy) && move_s < 200000)
	{
        


    }

 先来模拟牛的移动

代码语言:javascript
复制
if (mc == 0 && step == 0) // 牛向北移动
{
	step = 1; //一步一步走
	if (a[cx][cy - 1] != -1 && cy > 1)
	{
		turn = 1;
		cy--; // 在地图上为向上走
	}
	if (turn == 0) // 证明该转弯啦
	{
		mc++; // 顺时针下一分钟该向右(东)移动
	}
}
if (mc == 1 && step == 0) // 牛向东移动
{
	step = 1; //一步一步走
	if (a[cx + 1][cy] != -1 && cx < 10)
	{
		turn = 1;
		cx++; // 在地图上为向右走
	}
	if (turn == 0) // 证明该转弯啦
	{
		mc++; // 顺时针下一分钟该向下(南)移动
	}
}
if (mc == 2 && step == 0) // 牛向南移动
{
	step = 1;//一步一步走
	if (a[cx][cy + 1] != -1 && cy < 10)
	{
		turn = 1;
		cy++; // 在地图上为向下走
	}
	if (turn == 0) // 证明该转弯啦
	{
		mc++; // 顺时针下一分钟该向左(西)移动
	}
}
if (mc == 3 && step == 0) // 牛向西移动
{
	step = 1; //一步一步走
	if (a[cx - 1][cy] != -1 && cx > 1)
	{
		turn = 1;
		cx--; // 在地图上为向左走
	}
	if (turn == 0)
	{
		mc++;
	}
}

 John的移动方式和牛一样

代码语言:javascript
复制
if (mf == 0 && step == 0) // John向北移动
{
	step = 1; //一步一步走
	if (a[fx][fy - 1] != -1 && fy > 1)
	{
		turn = 1;
		fy--; // 在地图上为向上走
	}
	if (turn == 0) // 证明该转弯啦
	{
		mf++; // 顺时针下一分钟该向右(东)移动
	}
}
if (mf == 1 && step == 0) // John向东移动
{
	step = 1; //一步一步走
	if (a[fx + 1][fy] != -1 && fx < 10)
	{
		turn = 1;
		fx++; // 在地图上为向右走
	}
	if (turn == 0) // 证明该转弯啦
	{
		mf++; // 顺时针下一分钟该向下(南)移动
	}
}
if (mf == 2 && step == 0) // John向南移动
{
	step = 1; //一步一步走
	if (a[fx][fy + 1] != -1 && fy < 10)
	{
		turn = 1;
		fy++; // 在地图上为向下走
	}
	if (turn == 0) // 证明该转弯啦
	{
		mf++; // 顺时针下一分钟该向左(西)移动
	}
}
if (mf == 3 && step == 0) // John向西移动
{
	step = 1; //一步一步走
	if (a[fx - 1][fy] != -1 && fx > 1)
	{
		turn = 1;
		fx--; // 在地图上为向左走
	}
	if (turn == 0)
	{
		mf++;
	}
}

 完整版来啦:

代码语言:javascript
复制
#define  _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <iostream>
using namespace std;

int a[12][12], cx, cy, fx, fy; // 障碍物, 牛横纵, John横纵
char map; // 地图
int move_s; // 统计移动次数
int mf, mc; // John的移动方向, 牛的移动方向(0上 1右 2下 3左)
int step; // 一步一步走
int turn; // 转弯

int main()
{
	for (int i = 1; i <= 10; i++)
	{
		for (int j = 1; j <= 10; j++)
		{
			cin >> map; // 输入地图
			if (map == '*') // 障碍物
			{
				a[j][i] = -1;
			}
			if (map == 'C') // 记录牛的初始位置
			{
				cx = j;
				cy = i;
			}
			if (map == 'F') // 记录John的初始位置
			{
				fx = j;
				fy = i;
			}
		}
	}
	while ((cx != fx || cy != fy) && move_s < 200000)
	{
		mf %= 4; // 总共四个方向,所以模4判断
		mc %= 4;
		move_s++; // 统计行走次数
		step = 0; // 判断是否移动
		turn = 0; // 判断是否转弯
		// 牛移动
		if (mc == 0 && step == 0) // 牛向北移动
		{
			step = 1; //一步一步走
			if (a[cx][cy - 1] != -1 && cy > 1)
			{
				turn = 1;
				cy--; // 在地图上为向上走
			}
			if (turn == 0) // 证明该转弯啦
			{
				mc++; // 顺时针下一分钟该向右(东)移动
			}
		}
		if (mc == 1 && step == 0) // 牛向东移动
		{
			step = 1; //一步一步走
			if (a[cx + 1][cy] != -1 && cx < 10)
			{
				turn = 1;
				cx++; // 在地图上为向右走
			}
			if (turn == 0) // 证明该转弯啦
			{
				mc++; // 顺时针下一分钟该向下(南)移动
			}
		}
		if (mc == 2 && step == 0) // 牛向南移动
		{
			step = 1;//一步一步走
			if (a[cx][cy + 1] != -1 && cy < 10)
			{
				turn = 1;
				cy++; // 在地图上为向下走
			}
			if (turn == 0) // 证明该转弯啦
			{
				mc++; // 顺时针下一分钟该向左(西)移动
			}
		}
		if (mc == 3 && step == 0) // 牛向西移动
		{
			step = 1; //一步一步走
			if (a[cx - 1][cy] != -1 && cx > 1)
			{
				turn = 1;
				cx--; // 在地图上为向左走
			}
			if (turn == 0)
			{
				mc++;
			}
		}
		// John移动
		step = 0;
		turn = 0;
		if (mf == 0 && step == 0) // John向北移动
		{
			step = 1; //一步一步走
			if (a[fx][fy - 1] != -1 && fy > 1)
			{
				turn = 1;
				fy--; // 在地图上为向上走
			}
			if (turn == 0) // 证明该转弯啦
			{
				mf++; // 顺时针下一分钟该向右(东)移动
			}
		}
		if (mf == 1 && step == 0) // John向东移动
		{
			step = 1; //一步一步走
			if (a[fx + 1][fy] != -1 && fx < 10)
			{
				turn = 1;
				fx++; // 在地图上为向右走
			}
			if (turn == 0) // 证明该转弯啦
			{
				mf++; // 顺时针下一分钟该向下(南)移动
			}
		}
		if (mf == 2 && step == 0) // John向南移动
		{
			step = 1; //一步一步走
			if (a[fx][fy + 1] != -1 && fy < 10)
			{
				turn = 1;
				fy++; // 在地图上为向下走
			}
			if (turn == 0) // 证明该转弯啦
			{
				mf++; // 顺时针下一分钟该向左(西)移动
			}
		}
		if (mf == 3 && step == 0) // John向西移动
		{
			step = 1; //一步一步走
			if (a[fx - 1][fy] != -1 && fx > 1)
			{
				turn = 1;
				fx--; // 在地图上为向左走
			}
			if (turn == 0)
			{
				mf++;
			}
		}
	}
	if (move_s == 200000)
		printf("0\n");
	else
		printf("%d\n", move_s);
	return 0;
}

 创作不易,感谢各位大佬支持

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档