1 条题解
-
0
C :
#include<stdio.h> #include<string.h> char a[202][202]; int b[202][202]; int n,m,sum; void dfs(int x,int y,int t) { if(a[x][y]=='a'&&t<sum) sum=t; if(!b[x][y]&&a[x][y]!='#'&&x-1>=0) { b[x][y]=1; if(a[x][y]=='x') dfs(x-1,y,t+2); else dfs(x-1,y,t+1); b[x][y]=0; } if(!b[x][y]&&a[x][y]!='#'&&x+1<n) { b[x][y]=1; if(a[x][y]=='x') dfs(x+1,y,t+2); else dfs(x+1,y,t+1); b[x][y]=0; } if(!b[x][y]&&a[x][y]!='#'&&y-1>=0) { b[x][y]=1; if(a[x][y]=='x') dfs(x,y-1,t+2); else dfs(x,y-1,t+1); b[x][y]=0; } if(!b[x][y]&&a[x][y]!='#'&&y+1<m) { b[x][y]=1; if(a[x][y]=='x') dfs(x,y+1,t+2); else dfs(x,y+1,t+1); b[x][y]=0; } } int main() { int i,j,x1,x2,y1,y2; while(scanf("%d%d",&n,&m)!=EOF) { getchar(); for(i=0;i<n;i++) { for(j=0;j<m;j++) { scanf("%c",&a[i][j]); if(a[i][j]=='r') x1=i,y1=j; if(a[i][j]=='a') x2=i,y2=j; } getchar(); } memset(b,0,sizeof(b)); sum=999999; dfs(x1,y1,0); if(sum==999999) printf("I'm so sorry, but I can fly! bye~\n"); else printf("%d\n",sum); } return 0; }
C++ :
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<queue> using namespace std; int n, m; char mp[205][205]; bool v[205][205]; int mv[4][2] = { 1, 0, 0, 1, 0, -1, -1, 0 }; struct Node { int x; int y; int tep; Node(int tx, int ty, int tep) { x = tx; y = ty; this -> tep = tep; } Node(){} }; int bfs(int sx, int sy) { queue<Node> Q; Node node(sx, sy, 0); Node temp; Q.push(node); int x, y, tep; while(!Q.empty()) { temp = Q.front(); Q.pop(); x = temp.x; y = temp.y; tep = temp.tep; // printf("x = %d y = %d tep = %d\n", x, y, tep); if(mp[x][y] == 'a') { return tep; } if(mp[x][y] == 'x') { mp[x][y] = '.'; Node p(x, y, tep + 1); Q.push(p); continue; } for(int i = 0; i < 4; i++) { int tx = x + mv[i][0]; int ty = y + mv[i][1]; if(tx <0 || ty < 0 || tx >= n || ty >= m) { continue; } if(!v[tx][ty] && mp[tx][ty] != '#') { v[tx][ty] = true; Node p(tx, ty, tep + 1); Q.push(p); } } } return 0; } int main() { // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); while(cin >> n >> m) { int sx, sy; memset(v, false, sizeof(v)); for(int i = 0; i < n; i++) { for(int k = 0; k < m; k++) { cin >> mp[i][k]; if(mp[i][k] == 'r') { sx= i; sy = k; } } } int t = bfs(sx, sy); if(t) { printf("%d\n", t); } else { printf("I'm so sorry, but I can fly! bye~\n"); } } return 0; }
- 1
信息
- ID
- 3045
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者