2 3 4 1 0 0 0 0 0 1 1 1 1 1 0 5 5 1 1 1 1 0 0 0 1 0 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1
2 3
#include <stdio.h> #include <string.h> int sum; int m,n; int e[100][100];//储存这个图的二维数组 int next[4][2]={0,1,1,0,0,-1,-1,0};//定义一个方向数组 void dfs(int i,int j)//深搜 { int x,y; e[i][j] = 0;//将相连的水池全部赋0; for(int k=0;k<4;k++) { x = i+next[k][0]; y = j+next[k][1]; if(x<0||x>m-1||y<0||y>n-1)//判断是否越界 continue; else if(e[x][y]==1) { dfs(x,y); } } return; } int main() { int num; scanf("%d",&num); while(num--) { sum = 0; scanf("%d %d",&m,&n); for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { scanf("%d",&e[i][j]); } } for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { if(e[i][j]==1) { sum++; dfs(i,j); } } } printf("%d\n",sum); } return 0; }
原文地址:http://www.cnblogs.com/ltwy/p/3839793.html