UVa 11352 - Crazy King
2015-12-24 13:36
323 查看
題目:給定一個國際象棋的棋盤,上面有幾個對方的馬,已知己方的王當前位置和膜表位置,問最少幾步能走過去;
行走過程中,除了起點和終點外不能走入對方馬的攻擊位置,對方的馬不會移動。
分析:圖論,搜索,最短路。直接利用bfs搜索即可。
說明:注意那個輸出中的’'‘,WA好幾次才發現╮(╯▽╰)╭。
行走過程中,除了起點和終點外不能走入對方馬的攻擊位置,對方的馬不會移動。
分析:圖論,搜索,最短路。直接利用bfs搜索即可。
說明:注意那個輸出中的’'‘,WA好幾次才發現╮(╯▽╰)╭。
#include <cstring> #include <cstdio> char maps[101][101]; int dxy[8][2] = {-2,-1,-2,1,2,-1,2,1,-1,-2,-1,2,1,-2,1,2}; int Dxy[8][2] = {-1,-1,-1,0,-1,1,1,-1,1,0,1,1,0,-1,0,1}; int Q[10001], S[10001]; int bfs(int x0, int y0, int n, int m) { if (x0 < 0 || y0 < 0) return 0; int move = 0, save = 1; Q[S[0] = 0] = x0*100+y0; while (move < save) { int now = Q[move ++]; for (int k = 0; k < 8; ++ k) { int x = now/100+Dxy[k][0]; int y = now%100+Dxy[k][1]; if (x >= 0 && x < n && y >= 0 && y < m) { if (maps[x][y] == 'B') return S[move-1]+1; if (maps[x][y] == '.') { maps[x][y] = 'X'; Q[save] = 100*x+y; S[save] = S[move-1]+1; save ++; } } } } return 0; } int main() { int t, n, m; while (~scanf("%d",&t)) while (t --) { scanf("%d%d",&n,&m); for (int i = 0; i < n; ++ i) scanf("%s",maps[i]); int s_x = -1, s_y = -1; for (int i = 0; i < n; ++ i) for (int j = 0; j < m; ++ j) { if (maps[i][j] == 'A') { s_x = i; s_y = j; } if (maps[i][j] != 'Z') continue; for (int k = 0; k < 8; ++ k) { if (i+dxy[k][0] < 0 || i+dxy[k][0] >= n) continue; if (j+dxy[k][1] < 0 || j+dxy[k][1] >= m) continue; if (maps[i+dxy[k][0]][j+dxy[k][1]] == '.') maps[i+dxy[k][0]][j+dxy[k][1]] = 'X'; } } int step = bfs(s_x, s_y, n, m); if (step) printf("Minimal possible length of a trip is %d\n",step); else printf("King Peter, you can't go now!\n"); } return 0; }
相关文章推荐
- TTL与COMS的区别
- 兄弟连猿代码less css 视频教程学习平台
- java静态代码分析工具FindBugs
- LESS CSS 框架简介
- 抽象类与接口的区别:
- spring+mybatis的事务配置
- Linux下相关查找文件命令(find locate which whereis type)
- HTTP Cookie 详解
- Java NIO学习笔记之二-图解ByteBuffer
- 定时自动执行SQL存储过程(图文详解)
- 神经网络实现【转载】
- 函数的可重入和线程安全
- TCP/IP协议
- 对DB做数据更新时,忘了加where条件不要慌
- [消息传递之一]-NSNotification练习
- win7 下ffmpeg release 版本崩溃问题
- NSTimer 知识点记录
- 英文倒装句用法解析
- checkout: Please move or remove them before you can switch branches. Aborting could not detach HEA
- git push -f