深度优先搜索-炸弹人问题
2015-07-02 13:10
316 查看
#include <stdio.h> int book[20][20] = {0}; int max = 0, sum = 0, mx, my; char map[20][20] = { {"#############"}, {"#GG.GGG#GGG.#"}, {"###.#G#G#G#G#"}, {"#.......#..G#"}, {"#G#.###.#G#G#"}, {"#GG.GGG.#.GG#"}, {"#G#.#G#.#.#.#"}, {"##G...G.....#"}, {"#G#.#G###.#G#"}, {"#...G#GGG.GG#"}, {"#G#.#G#G#.#G#"}, {"#...G#GGG.GG#"}, {"#G#.#G#G#.#G#"}, {"#GG.GGG#G.GG#"}, {"#############"} }; int getnum(int i, int j) { int sum = 0; int x, y; //向上 x = i; y = j; while (map[x][y] != '#') { if (map[x][y] == 'G') { sum++; } x--; } //向下 x = i; y = j; while (map[x][y] != '#') { if (map[x][y] == 'G') { sum++; } x++; } //向左 x = i; y = j; while (map[x][y] != '#') { if (map[x][y] == 'G') { sum++; } y--; } //向下 x = i; y = j; while (map[x][y] != '#') { if (map[x][y] == 'G') { sum++; } y++; } return sum; } void dfs(int x, int y) { int tx, ty; int k; int next[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; sum = getnum(x, y); if (sum > max) { max = sum; mx = x; my = y; } for (k = 0; k <= 3; k++) { tx = x + next[k][0]; ty = y + next[k][1]; if (tx < 0 || tx > 12 || ty < 0 || ty > 12) continue; if (map[tx][ty] == '.' && book[tx][ty] == 0) { book[tx][ty] = 1; dfs(tx, ty); book[tx][ty] = 0; } } return; } int main() { int start_x, start_y; printf("输入起点坐标:"); scanf("%d %d", &start_x, &start_y); book[start_x][start_y] = 1; max = getnum(start_x, start_y); mx = start_x; my = start_y; dfs(start_x, start_y); printf("应该放在(%d,%d)处,共消灭%d个敌人\n", mx, my, max); getchar(); getchar(); return 0; }
相关文章推荐
- acm 推荐题
- HashMap实现原理分析
- ant 自动化编译
- PL/SQL 命名规范
- js 设置Cookie 在PHP中读取(大师手法)
- 安卓作业—自动登录
- override 和 overload的区别(较全面)
- 修复XCode7 Beta版无法使用iOS8.4真机调试的Bug
- 手机移动端web 禁止手机返回功能的最好方法,虽然很变态,但是很有效.
- 打包静态库和动态库
- 自定义View初体验(一)
- css position属性 以及 float、display、position的问题整合
- java总结(之二)--容器的深入研究
- in、or与union all的性能对比
- 2015网络安全大会-上
- 瀑布流布局(基于多栏列表流体布局实现)
- 【博客美化】博客美化之添加人体闹钟
- 第十七周oj刷题——Problem B: 分数类的四则运算【C++】
- linux系统中利用vagrant创建虚拟开发环境
- Linux的一些小知识