初学DFS:HDU1241 Oil deposits

来源:互联网 发布:软件研发公司 编辑:程序博客网 时间:2024/05/19 04:29

这题做了几小时,怪自己粗心

注意题目给出的最后一组数据M后面多了一个空格,不要直接复制,我就是直接复制过来写成文件调试,坑死了

#include <iostream>#include <cstdio>#include <cstring>//#define testusing namespace std;char vis[105][105];int cnt;int M,N;int dir[8][2] = {{0,1},{1,0},{-1,0},{0,-1},{1,1},{-1,1},{1,-1},{-1,-1}};void dfs(int x,int y){    vis[x][y]='*';    //printf("%d %d\n",x,y);    int xx,yy;    for(int i=0; i<8; i++)    {        xx=x+dir[i][0];        yy=y+dir[i][1];        if(xx>M||yy>N||xx<1||yy<1||vis[xx][yy]=='*')            continue;        if(vis[xx][yy]=='@')            dfs(xx,yy);    }    return;}int main(){    //fp=fopen("out.txt","w");    while(scanf("%d %d",&M,&N)!=EOF)    {        getchar();        if(M==0||N==0)            break;        for(int i=1; i<=M; i++)        {            for(int j=1; j<=N; j++)                scanf("%c",&vis[i][j]);            getchar();//get the char '\n'        }#ifdef test        for(int i=1; i<=M; i++)        {            for(int j=1; j<=N; j++)                printf("%c",vis[i][j]);            printf("\n");        }#endif        cnt=0;        for(int i=1; i<=M; i++)            for(int j=1; j<=N; j++)                if(vis[i][j]=='@')                {                    cnt++;                    dfs(i,j);                }        printf("%d\n",cnt);        //memset(vis,0,sizeof(vis));    }    return 0;}


0 0
原创粉丝点击