用深度优先搜索找到地图降落点最大的相连块的数目

来源:互联网 发布:网络老虎机赌博 编辑:程序博客网 时间:2024/06/06 14:29
#include <stdio.h>int map[51][51] = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},{0, 1, 2, 1, 0, 0, 0, 0, 0, 2, 3},{0, 3, 0, 2, 0, 1, 2, 1, 0, 1, 2},{0, 4, 0, 1, 0, 1, 2, 3, 2, 0, 1},{0, 3, 2, 0, 0, 0, 1, 2, 4, 0, 0},{0, 0, 0, 0, 0, 0, 0, 1, 5, 3, 0},{0, 0, 1, 2, 1, 0, 1, 5, 4, 3, 0},{0, 0, 1, 2, 3, 1, 3, 6, 2, 1, 0},{0, 0, 0, 3, 4, 8, 9, 7, 5, 0, 0},{0, 0, 0, 0, 3, 7, 8, 6, 0, 1, 2},{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}};int book[51][51] = {0};int sum = 0;int next[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};void dfs(int x, int y){int k;int tx, ty;for (k = 0; k <= 3; k++){tx = x + next[k][0];ty = y + next[k][1];if (tx < 1 || tx > 10 || ty < 1 || ty > 10)continue;if (map[tx][ty] > 0 && book[tx][ty] == 0){sum++;book[tx][ty] = 1;dfs(tx, ty);//book[tx][ty] = 0;}}return;}int main(){int startx, starty;printf("输入起点:");scanf("%d %d", &startx, &starty);if (map[startx][starty] > 0){book[startx][starty] = 1;sum = 1;}else{printf("这个地方是大海!!!!!\n");getchar();getchar();return 0;}dfs(startx, starty);printf("如果降落点是(%d, %d),总共有%d个地图块是相连的。\n",startx, starty, sum);getchar();getchar();return 0;}





0 0
原创粉丝点击