广度
#include<stdio.h>
struct note{
int x;
int y;
};
int main()
{
int num=0,head=0,tail=0,i,map[10][10],book[10][10]={0},j;
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}},tx,ty;
struct note que[100];
for(i=0;i<10;i++)
for(j=0;j<10;j++)
scanf("%d",&map[i][j]);
book[5][7]=1;
que[tail].x=5;
que[tail].y=7;
num++;
tail++;
while(head<tail)
{
for(i=0;i<4;i++)
{
tx=que[head].x+next[i][0];
ty=que[head].y+next[i][1];
if(tx<0||tx>=10||ty<0||ty>=10)
continue;
if(map[tx][ty]&&book[tx][ty]==0)
{
book[tx][ty]=1;
num++;
que[tail].x=tx;
que[tail].y=ty;
tail++;
}
}
head++;
}
printf("%d",num);
getchar();getchar();
}
深度
#include<stdio.h>
int book[10][10]={0},map[10][10],sum=0;
int nexts[4][2]={
{0,1},{1,0},{0,-1},{-1,0}
};
void dfs(int x,int y)
{
int i;
if(x<0||x>10||y<0||y>10)
return ;
if(book[x][y]==1||map[x][y]==0)
return ;
sum++;
book[x][y]=1;
for(i=0;i<4;i++)
dfs(x+nexts[i][0],y+nexts[i][1]);
return ;
}
int main()
{
int i,j;
for(i=0;i<10;i++)
for(j=0;j<10;j++)
scanf("%d",&map[i][j]);
dfs(5,7);
printf("%d",sum);
getchar();getchar();
}
着色(-1)
深度算法基础上,在dfs添加一个变量c即可
#include<stdio.h>
int book[10][10]={0},map[10][10],sum=0;
int nexts[4][2]={
{0,1},{1,0},{0,-1},{-1,0}
};
void dfs(int x,int y,int c)
{
int i;
if(x<0||x>10||y<0||y>10)
return ;
if(book[x][y]==1||map[x][y]==0)
return ;
sum++;
book[x][y]=1;
map[x][y]=c;
for(i=0;i<4;i++)
dfs(x+nexts[i][0],y+nexts[i][1]);
return ;
}
int main()
{
int i,j;
for(i=0;i<10;i++)
for(j=0;j<10;j++)
scanf("%d",&map[i][j]);
dfs(5,7,-1);
printf("%d\n",sum);
for(i=0;i<10;i++){
for(j=0;j<10;j++)
printf("%d ",map[i][j]);
printf("\n");
}
getchar();getchar();
}
有几个岛屿
着色基础上,主函数里遍历二维数组即可
#include<stdio.h>
int book[10][10]={0},map[10][10],num=0;
int nexts[4][2]={
{0,1},{1,0},{0,-1},{-1,0}
};
void dfs(int x,int y,int c)
{
int i;
if(book[x][y]==1||map[x][y]==0)
return ;
if(x<0||x>=10||y<0||y>=10)
return ;
book[x][y]=1;
map[x][y]=c;
for(i=0;i<4;i++)
dfs(x+nexts[i][0],y+nexts[i][1],c);
return ;
}
int main()
{
int i,j,n=0;
for(i=0;i<10;i++)
for(j=0;j<10;j++)
scanf("%d",&map[i][j]);
for(i=0;i<10;i++)
for(j=0;j<10;j++)
{
if(map[i][j]>0)
{
num--;
n++;
dfs(i,j,num);
}
}
printf("%d\n",n);
for(i=0;i<10;i++){
for(j=0;j<10;j++)
printf("%d ",map[i][j]);
printf("\n");
}
getchar();getchar();
}