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

来源:互联网 发布:百锐腾app软件 编辑:程序博客网 时间:2024/05/06 15:36
#include <stdio.h>struct node{int x;int y;};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;}int main(){struct node queue[401];int head, tail;int book[20][20] = {0};int start_x, start_y;int max = 0, sum = 0, mx, my;int tx, ty;int k;int next[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};printf("输入起点坐标:");scanf("%d %d", &start_x, &start_y);head = 1;tail = 1;book[start_x][start_y] = 1;queue[tail].x = start_x;queue[tail].y = start_y;tail++;max = getnum(start_x, start_y);tx = start_x;ty = start_y;while (head < tail){for (k = 0; k <= 3; k++){tx = queue[head].x + next[k][0];ty = queue[head].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;queue[tail].x = tx;queue[tail].y = ty;tail++;sum = getnum(tx, ty);if (sum > max){max = sum;mx = tx;my = ty;}}}head++;}printf("应该放在(%d,%d)处,共消灭%d个敌人\n", mx, my, max);getchar();getchar();return 0;}

0 0
原创粉丝点击