[P1518 [USACO2.4] 两只塔姆沃斯牛 The Tamworth Two]的解题思路
1.[P1518 [USACO2.4] 两只塔姆沃斯牛 The Tamworth Two]的解题思路
2.P1098 [NOIP2007 提高组] 字符串的展开(总结)P1518 [USACO2.4] 两只塔姆沃斯牛 The Tamworth Two
初始思路
利用数字1~4代表方向;
利用两个循环来实现两个角色的行为,通过每一步break实现两个角色的同步。
由于题目本意是同步,而我这实质上是分步(牛在前Farmer John在后),所以用Farmer John的行为后判别结束条件。
注意
如果用Farmer John的下一步判别结束是不行的,可能牛会撞上Farmer John。
注意判别式在行为语句中的位置。每个行为后都要判断。
#include <iostream>
#include <cmath>
using namespace std;
int time;
int main() {
char a[11][11];
int cx, cy, fx, fy;
for (int y = 1; y <= 10; y++) {
for (int x = 1; x <= 10; x++) {
cin >> a[x][y];
if (a[x][y] == 'C') {
cx = x;
cy = y;
a[x][y] == '.';
} else if (a[x][y] == 'F') {
fx = x;
fy = y;
a[x][y] == '.';
}
}
}
int c = 1, f = 1;
for (int j = 1; ; j++) {
for (int i = 1; ; i++) {
if (c == 1) {
if (a[cx][cy - 1] == '*' || cy == 1) {
c = 2;
time++;
break;
} else {
cy--;
time++;
break;
}
}
if (c == 2) {
if (a[cx + 1][cy] == '*' || cx == 10) {
c = 3;
time++;
break;
} else {
cx++;
time++;
break;
}
}
if (c == 3) {
if (a[cx][cy + 1] == '*' || cy == 10) {
c = 4;
time++;
break;
} else {
cy++;
time++;
break;
}
}
if (c == 4) {
if (a[cx - 1][cy] == '*' || cx == 1) {
c = 1;
time++;
break;
} else {
cx--;
time++;
break;
}
}
}
for (int i = 1; ; i++) {
if (f == 1) {
if (a[fx][fy - 1] == '*' || fy == 1) {
f = 2;
if (fx == cx && cy == fy) {
cout << time;
return 0;
}
break;
} else {
fy--;
if (fx == cx && cy == fy) {
cout << time;
return 0;
}
break;
}
}
if (f == 2) {
if (a[fx + 1][fy] == '*' || fx == 10) {
f = 3;
if (fx == cx && cy == fy) {
cout << time;
return 0;
}
break;
} else {
fx++;
if (fx == cx && cy == fy) {
cout << time;
return 0;
}
break;
}
}
if (f == 3) {
if (a[fx][fy + 1] == '*' || fy == 10) {
f = 4;
if (fx == cx && cy == fy) {
cout << time;
return 0;
}
break;
} else {
fy++;
if (fx == cx && cy == fy) {
cout << time;
return 0;
}
break;
}
}
if (f == 4) {
if (a[fx - 1][fy] == '*' || fx == 1) {
f = 1;
if (fx == cx && cy == fy) {
cout << time;
return 0;
}
break;
} else {
fx--;
if (fx == cx && cy == fy) {
cout << time;
return 0;
}
break;
}
}
}
if (time > 1000000) {
cout << 0;
return 0;
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?