您的位置:首页 > 其它

深度优先搜索-炸弹人问题

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;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: