社区讨论
求追不到牛的解决办法
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 条回复,欢迎继续交流。
正在加载回复...