dfs

来源:互联网 发布:网络发帖犯法吗 编辑:程序博客网 时间:2024/06/10 08:22

这道题还算简单,题意是求在这10*12的矩阵中有几个 联通的W区域。
大概就是用dfs,深度搜索,从(0,0)开始,只要搜到W,就将计数变量自增,然后开始dfs,并将访问过的W变为
。即可,最后的计数变量的值就是联通区域个数。
代码如下:

#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <map>#include <vector>#include <set>using namespace std;int N, M;int cnt = 0;char m[550][550]={'.'};void DFS(int i, int j){    if(m[i][j] == 'W')        m[i][j] = '.';    else        return;    DFS(i+1,j);    DFS(i+1,j+1);    DFS(i+1,j-1);    DFS(i-1,j);    DFS(i-1,j+1);    DFS(i-1,j-1);    DFS(i,j+1);    DFS(i,j-1);    return;}void dfs(){    int i, j;    for(i=1; i<=N; i++)    {        for(j=1; j<=M; j++)        {            if(m[i][j] == 'W'){                cnt++;                DFS(i, j);            }        }    }}int main(){    cin >> N >> M;    int i,j;    for(i=1; i<=N; i++)    {        for(j=1; j<=M; j++)        {            cin >> m[i][j];        }    }    dfs();    cout << cnt <<endl;    return 0;}

1 0
原创粉丝点击