#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
using namespace std;
int main()
{
char map[12][12];
int i, j;
for (j = 0; j <= 11; ++j)//围墙
{
map[0][j] = '*';
map[11][j] = '*';
map[j][0] = '*';
map[j][11] = '*';
}
int fx, fy, cx, cy;
for (i = 1; i <= 10; ++i)//输入地图
{
for (j = 1; j <= 10; ++j)
{
cin >> map[i][j];
if (map[i][j] == 'F')
{
fx = i;
fy = j;
map[i][j] = '.';//记录初始位置
}
else if (map[i][j] == 'C')
{
cx = i;
cy = j;
map[i][j] = '.';//记录初始位置
}
}
}
int cd = 0, fd = 0;//方向
//0 - North, 1 - East, 2 - South, 3 - West
bool state[11][11][4][11][11][4] = { false };
//fx,fy,fd,cx,cy,cd
state[fx][fy][fd][cx][cy][cd] = true;
int cnt = 0;
while (1)
{
switch (cd)
{
case 0://North
if (map[cx][cy - 1] == '*')
{
cd = 1;//to East
}
else
cy--;
break;
case 1://East
if (map[cx + 1][cy] == '*')
{
cd = 2;//to South
}
else
cx++;
break;
case 2://South
if (map[cx][cy + 1] == '*')
{
cd = 3;//to West
}
else
cy++;
break;
case 3://West
if (map[cx - 1][cy] == '*')
{
cd = 0;//to North
}
else
cx--;
break;
}
switch (fd)
{
case 0://North
if (map[fx][fy - 1] == '*')
{
fd = 1;//to East
}
else
fy--;
break;
case 1://East
if (map[fx + 1][fy] == '*')
{
fd = 2;//to South
}
else
fx++;
break;
case 2://South
if (map[fx][fy + 1] == '*')
{
fd = 3;//to West
}
else
fy++;
break;
case 3://West
if (map[fx - 1][fy] == '*')
{
fd = 0;//to North
}
else
fx--;
break;
}
cnt++;//加一分钟
/*cout << "cnt: " << cnt << endl;*/
//测试用
if (state[fx][fy][fd][cx][cy][cd])//如果出现过这种状态则说明无解
{
cout << "While(1)" << endl;
cout << 0;
break;
}
else//这个状态未出现,记录状态后,判断是否相遇
{
state[fx][fy][fd][cx][cy][cd] = true;
if (fx == cx && fy == cy)
{
cout << cnt;
break;
}
}
}
return 0;
}
感谢你看完我的代码QAQ
实在想不明白哪里出问题了