首页 > 代码库 > poj3009
poj3009
1 #include <iostream> 2 3 using namespace std; 4 5 int w, h; 6 int MAP[41][41]; 7 int sx, sy, ex, ey; 8 int res; 9 int dx[4] = { 10 1, -1, 0, 0 11 }; 12 int dy[4] = { 13 0, 0, 1, -1 14 }; 15 16 int runing(int &x, int &y, int dir) 17 { 18 for(;;) 19 { 20 int nx = x + dx[dir]; 21 int ny = y + dy[dir]; 22 if(nx >= 0 && nx < w && ny >= 0 && ny < h) 23 { 24 if(MAP[ny][nx] == 1) 25 { 26 return 1; 27 } 28 else if(nx == ex && ny == ey) 29 { 30 return 0; 31 } 32 } 33 else 34 { 35 return -1; 36 } 37 x = nx; 38 y = ny; 39 } 40 } 41 42 void dfs(int x, int y, int sum) 43 { 44 int nx, ny; 45 //´óÓÚ10£¬¼ôÖ¦ 46 if(sum > 10) 47 return ; 48 49 50 //Ëĸö·½Ïò½øÐÐËÑÑ° 51 for(int i = 0; i < 4; ++i) 52 { 53 nx = x + dx[i]; 54 ny = y + dy[i]; 55 if(nx >= 0 && nx < w && ny >= 0 && ny < h) 56 { 57 if(MAP[ny][nx] == 1) 58 { 59 continue; 60 } 61 } 62 else 63 continue; 64 nx = x; ny = y; 65 int temp = runing(nx, ny, i); 66 //ÍùÕâ¸ö·½ÏòÅöµ½µÄÊÇǽ 67 if(temp == 1) 68 { 69 MAP[ny+dy[i]][nx+dx[i]] = 0; 70 dfs(nx, ny, sum+1); 71 MAP[ny+dy[i]][nx+dx[i]] = 1; 72 73 } 74 //ÍùÕâ¸ö·½Ïò³ö½çÁË 75 else if(temp == -1) 76 { 77 continue; 78 } 79 //ÍùÕâ¸ö·½Ïòµ½´ïÁËÖÕµã 80 else if(temp == 0) 81 { 82 if(res > sum) 83 res = sum; 84 } 85 } 86 87 } 88 89 void solver() 90 { 91 res = 11; 92 dfs(sx, sy, 1); 93 94 } 95 int main() 96 { 97 while(cin >> w >> h) 98 { 99 if(w == 0 && h == 0)100 break;101 //input102 for(int i = 0; i < h; ++i)103 {104 for(int j = 0; j < w; ++j)105 {106 cin >> MAP[i][j];107 if(MAP[i][j] == 2)108 {109 sx = j;110 sy = i;111 }112 if(MAP[i][j] == 3)113 {114 ex = j;115 ey = i; 116 }117 } 118 }119 //solver120 solver();121 //output 122 if(res > 10)123 cout << -1 << endl;124 else125 cout << res << endl; 126 } 127 128 return 0;129 }
poj3009
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。