求追不到牛的解决办法
查看原帖
求追不到牛的解决办法
790685
bluetored楼主2022/10/23 08:21

我是给北东南西分别出事值为0,1,2,3(原本打算和cnt与取余符号搭配食用,结果做题脑抽给忘了),然后模拟,变换方向,但是我发现,追不到循环根本停不下来,我猜测是四方向都被堵了,又转念一想(nt才这样出题)然后解析看到了各种花样,什么专属坐标,循环模拟,拜托根本不懂QAQ附代码


#include <iostream>
#include <cstring>
using namespace std;
int main ()
{
	const int n = 0, e = 1, s = 2,w = 3;
	int cx, cy, fx, fy,retc=0,retf=0,cnt=0;
	char map[11][11];
	for (int i = 1; i <= 10; i++)
	{
		for (int j = 1; j <= 10; j++) {
			cin >> map[i][j];
			if (map[i][j] == 'F') { fx = i; fy = j; }
			if (map[i][j] == 'C') { cx = i; cy = j; }
		}
	}
	while (1)
	{
		switch (retf) {
		case n: if (fx-1 != 0 && map[fx-1][fy] != '*')  {fx--; break;}
			  else { retf = e; break; }
		case e: if (fy+1 != 11 && map[fx][fy+1] != '*') {fy++; break;}
			  else { retf = s; break; }
		case s: if (fx+1 != 11 && map[fx+1][fy] != '*') { fx++; break; }
			  else { retf = w; break; }
		case w:if (fy-1 != 0 && map[fx][fy-1] != '*') {fy--; break;}
			  else { retf = n; break; }
		}
		switch (retc) {
		case n: if (cx-1 != 0 && map[cx-1][cy] != '*') { cx--; break; }
			  else { retc = e; break; }
		case e: if (cy+1 != 11 && map[cx][cy+1] != '*') { cy++; break; }
			  else { retc = s; break; }
		case s: if (cx+1 != 11 && map[cx+1][cy] != '*') { cx++; break; }
			  else { retc = w; break; }
		case w:if (cy-1 != 0 && map[cx][cy-1] != '*') { cy--; break; }
			  else { retc = n; break; }
		}
		cnt++;
		if (fx == cx && fy == cy)
		{
			break;
		}
	}
	cout << cnt;
	return 0;
}

其实switch case挺好用的

2022/10/23 08:21
加载中...