本文共 2013 字,大约阅读时间需要 6 分钟。
#include#include using namespace std;int sx,sy,ex,ey;int maze[10][10];char maze_in[10];int n,m,t;bool sol;int wall;int dir[4][2]= { {1,0},{-1,0},{0,1},{0,-1}};void dfs(int x, int y, int k) { if(k > t || sol == true) return; if(k == t && x == ex && y == ey){ sol = true; return; } int tmp = t-k-abs(x-ex)-abs(y-ey); if(tmp < 0 || (tmp %2 == 1)) return; for(int i = 0; i < 4; i++ ){ int xx = x +dir[i][0]; int yy = y + dir[i][1]; if(xx >=0 &&xx = 0&&y < m&&maze[xx][yy] == 1){ maze[xx][yy] = 0; dfs(xx,yy,k+1); maze[xx][yy] = 1; } } }int main() { while(scanf("%d%d%d",&n,&m,&t) && n){ sol = false; wall = 0; for(int i = 0; i < n; i++ ){ scanf("%s",maze_in); for(int j = 0; j < m; j++ ){ if(maze_in[j] == 'X'){ maze[i][j] = 0; wall++; } else{ maze[i][j] = 1; if(maze_in[j] == 'S'){ maze[i][j] = 0; sx = i; sy = j; } if(maze_in[j] == 'D'){ ex = i; ey = j; } } } } if(n*m-wall <= t || (abs(sx-ex)+abs(sy-ey) - t)%2 == 1 ){ cout << "NO\n"; continue; } dfs(sx,sy,0); if(sol) cout<<"YES\n"; else cout<<"NO\n"; } return 0; }
#include#include #include #include using namespace std;char map[10][10];char maze[10];int n, m, t;int vis[10][10];int dir[4][2] = { {1,0},{-1,0},{0,1},{0,-1}};int flag = 0;int sX,sY,dX,dY;int wal = 0;void dfs(int x, int y, int s) { if(flag == 1 || s > t) return; if(map[x][y] == 'D' && s == t){ flag = 1; return; } int tmp = t-s-abs(x-dX)-abs(y-dY); if(tmp < 0 || tmp %2 == 1){ return; } for(int i = 0; i < 4; i++ ){ int xx = x+dir[i][0]; int yy = y+dir[i][1]; if(xx >= 0&&yy>=0&&xx t || (t-abs(sX-dX)-abs(sY-dY)) % 2 == 1){ cout <<"NO\n"; continue; } flag = 0; dfs(sX, sY, 0); if(flag) cout << "YES\n"; else cout << "NO\n"; } return 0; }
转载地址:http://olimi.baihongyu.com/