用递归做的一个,供楼主参考
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define rl 10 //定义地图大小为10*10
void findlink(char a[][rl],int x,int y,int l)
{//递归求连片部落
int i,j;
i=x;j=y;
a[i][j]=l+'A'; //将连片部落改成大写字母表示
i=x-1;
if(i>=0&&a[i][j]=='*')findlink(a,i,j,l); //向上查看
i=x+1;
if(i<rl&&a[i][j]=='*')findlink(a,i,j,l); //向下查看
i=x;j=y-1;
if(j>=0&&a[i][j]=='*')findlink(a,i,j,l); //向左查看
j=y+1;
if(j<rl&&a[i][j]=='*')findlink(a,i,j,l); //向右查看
}
void main()
{
char map[rl][rl];
int i,j,k,l;
for(i=0;i<rl;i++)
{
for(j=0;j<rl;j++)
{
map[i][j]='*';
if(rand()%2)map[i][j]='#';
printf("%c",map[i][j]); //产生10*10的随机地图并打印
}
printf("\n");
}
l=0;
for(i=0;i<rl;i++)
{
for(j=0;j<rl;j++)
{
if(map[i][j]=='*')
{
findlink(map,i,j,l++);
}
}
}
printf("\n%d个国王\n\n",l);
for(i=0;i<rl;i++)
{
for(j=0;j<rl;j++)
{
printf("%c",map[i][j]); //打印各部落图形,每个连片部落用一个大写字母表示
}
printf("\n");
}
}
图片附件: 游客没有浏览图片的权限,请
登录 或
注册