不知道哪里有数组越界
查看原帖
不知道哪里有数组越界
572269
KevinMark楼主2022/11/29 20:31
#include<stdc++.h>
using namespace std;
struct cow {
	int x;
	int y;
	int d;
};
struct farmer {
	int x;
	int y;
	int d;
};
farmer f;
cow c;
char cmap[30][30] = { '\0' };
int bmap[30][30] = { 0 };
//定义结构体表述牛和农夫
//用函数封装移动逻辑
void FarmerMove()
{
	switch (f.d)
	{
	case 1:
		f.y--;
		break;
	case 2:
		f.x++;
		break;
	case 3:
		f.y++;
		break;
	case 4:
		f.x--;
		break;
	default:
		break;
	}
}
void CowMove()
{
	switch (c.d)
	{
	case 1:
		c.y--;
		break;
	case 2:
		c.x++;
		break;
	case 3:
		c.y++;
		break;
	case 4:
		c.x--;
		break;
	default:
		break;
	}
}
bool FMeetOb()
{
	if (f.x + 1 == 10 || f.x - 1 == 0 || f.y + 1 == 10 || f.y - 1 == 0 ||  bmap[f.x+1][f.y]== 1 || bmap[f.x-1][f.y] == 1 || bmap[f.x][f.y-1]==1 || bmap[f.x][f.y+1] == 1)
	{
		return true;
	}
	else
	{
		return false;
	}
}
bool CMeetOb()
{
	if (c.x + 1 == 10 || c.x - 1 == 0 || c.y + 1 == 10 || c.y - 1 == 0 || bmap[c.x + 1][c.y] == 1 || bmap[c.x - 1][c.y] == 1 || bmap[c.x][c.y - 1] == 1 || bmap[c.x][c.y + 1] == 1)
	{
		return true;
	}
	else
	{
		return false;
	}
}

void FTurn()
{
	if (f.d == 4)
	{
		f.d = 1;
	}
	else
	{
		f.d++;
	}
}
void CTurn()
{
	if (c.d == 4)
	{
		c.d = 1;
	}
	else
	{
		c.d++;
	}
}
int main()
{
	//定义一个字符数组
	c.d = 1;
	f.d = 1;
	int time = 1;
	int tz = 0; bool s[199999];
	memset(s, false, sizeof(s));
	for (int i = 1; i <= 10; i++)
	{
		for (int j = 1; j <= 10; j++)
		{
			cin >> cmap[i][j];
			switch (cmap[i][j])
			{
			case '*':
				bmap[i][j] = 1;
				break;
			case 'F':
				f.x = i;
				f.y = j;
				break;
			case 'C':
				c.x = i;
				c.y = j;
				break;
			default:
				break;
			}
		}
	}
	//移动
	bool meet = false;
	while (meet == false)
	{
		if (f.x == c.x && f.y == c.y)
		{
			meet = true;
		}
		else
		{
			time++;
			tz = f.x + f.y * 10 + c.x * 100 + c.y * 200 + f.d * 3000 + c.d * 4000;
			if (s[tz] == true)
			{
				cout << 0 << endl;
				return 0;
			}
			else
			{
				if (FMeetOb())//碰到障碍物
				{
					FTurn();
				}
				if (CMeetOb())
				{
					CTurn();
				}
				FarmerMove();
				CowMove();
				s[tz] = true;
			}
			
		}
	}
	cout << time << endl;
	return 0;
}
2022/11/29 20:31
加载中...