1 条题解
-
0
C :
#include <stdio.h> //Dfs深度优先搜索 注意搜索深度t #include <string.h> char D[20][20]; int t,n,m; int road(int i,int o,int timet) { int time[4]={0},j; if (D[i][o]=='E') return 1; if (timet==0) return 100; D[i][o]='#'; if (o<m-1&&D[i][o+1]!='#') time[0]=road(i,o+1,timet-1)+1; else time[0]=100; if (o>0&&D[i][o-1]!='#') time[1]=road(i,o-1,timet-1)+1; else time[1]=100; if (i>0&&D[i-1][o]!='#') time[2]=road(i-1,o,timet-1)+1; else time[2]=100; if (i<n-1&&D[i+1][o]!='#') time[3]=road(i+1,o,timet-1)+1; else time[3]=100; D[i][o]='.'; for (j=1;j<4;j++) if (time[0]>time[j]) time[0]=time[j]; return time[0]; } int main() { int i,o,k,l,time; while (scanf("%d%d%d",&n,&m,&t)!=EOF&&n&&m) { getchar(); for (i=0;i<n;i++) { gets(D[i]); for (o=0;o<m;o++) { if (D[i][o]=='S') { k=i; l=o; } } } time=road(k,l,t-1); if (time<=1||time>t) printf("Tragedy!!!\n"); else printf("Oh Yes!!!\n"); } return 0; }
C++ :
#include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; struct MAZE { int x, y, time; } s, e, head, tail; char g[10][10]; int v[10][10], f[][2] = { { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 } }, n, m, t; int bfs() { memset(v, 0, sizeof(v)); queue<struct MAZE> q; s.time = 1; v[s.x][s.y] = 1; q.push(s); while (!q.empty()) { head = q.front(); q.pop(); for (int i = 0; i < 4; i++) { tail.x = head.x + f[i][0]; tail.y = head.y + f[i][1]; tail.time = head.time + 1; if (!v[tail.x][tail.y] && g[tail.x][tail.y] != '#' && tail.x >= 0 && tail.x < n && tail.y >= 0 && tail.y < m) { if (tail.x == e.x && tail.y == e.y && tail.time <= t) return 1; v[tail.x][tail.y] = 1; q.push(tail); } } } return 0; } int main() { int i, j; while (cin >> n >> m >> t, n && m) { for (i = 0; i < n; i++) for (j = 0; j < m; j++) { cin >> g[i][j]; if (g[i][j] == 'S') { s.x = i; s.y = j; } else if (g[i][j] == 'E') { e.x = i; e.y = j; } } puts(bfs() ? "Oh Yes!!!" : "Tragedy!!!"); } return 0; }
- 1
信息
- ID
- 1950
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者