黑白图像 图论

任务是输入一n*n的黑白图像(1表示黑色,0表示白色),统计其中八连块的个数,如果两个黑格子有公共边或者公共定点,就说明它们属于同一个八连块
图中左上角的一个黑格子是一个八连块,正上方的三个黑格子是一个八连块,左下角那一堆是一个八连块,能理解八连块是一个组合这题就好写了
用DFS做的 其实BFS我感觉会更好点吧,如果用BFS来写就只需要把队列和栈进行一下转换就行了

#include <iostream>

#include <string>

using namespace std ;

const int MAXN = 1000 ;

int matrix[MAXN][MAXN] , vis[MAXN][MAXN] ;

void dfs(int x, int y)  

{

 if (!matrix[x][y] || vis[x][y])  

return ;

 vis[x][y] = 1 ;

   dfs(x-1,y) ;  dfs(x-1,y-1) ;  dfs(x-1,y+1) ;

   dfs(x,y-1) ;              dfs(x,y+1) ;  

dfs(x+1,y-1) ;  dfs(x+1,y) ;  dfs(x+1,y+1) ;

}

int main()

{  

int n ;

 memset(matrix,0,sizeof(matrix)) ;

 memset(vis,0,sizeof(vis)) ;

   cin >> n ;  

for (int i = 0 ; i < n ; i++)

 {

  string word ;  

cin >> word ;  

for (int j = 0 ; j < n ; ++ j)

  {  

  matrix[i+1][j+1] = word[j]-'0' ;

  }  

}

 int count = 0 ;

 for (i = 1 ; i <= n ; ++ i)

 {  

for (int j = 1 ; j <= n ; ++ j)

  {  

  if (!vis[i][j] && matrix[i][j])

   {   

  count ++ ;  

   dfs(i,j) ;   

}

  }

 }

 cout << count << endl ;

 return 0 ;

}
View Code

 

posted on 2013-07-09 22:20  Forgiving  阅读(170)  评论(0编辑  收藏  举报