社区讨论

求追不到牛的解决办法

P1518[USACO2.4] 两只塔姆沃斯牛 The Tamworth Two参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo7r3ik4
此快照首次捕获于
2023/10/27 06:23
2 年前
此快照最后确认于
2023/10/27 06:23
2 年前
查看原帖
我是给北东南西分别出事值为0,1,2,3(原本打算和cnt与取余符号搭配食用,结果做题脑抽给忘了),然后模拟,变换方向,但是我发现,追不到循环根本停不下来,我猜测是四方向都被堵了,又转念一想(nt才这样出题)然后解析看到了各种花样,什么专属坐标,循环模拟,拜托根本不懂QAQ附代码

CPP
#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挺好用的

回复

2 条回复,欢迎继续交流。

正在加载回复...