HDU 1198 Farm Irrigation

来源:互联网 发布:des算法与rsa算法 编辑:程序博客网 时间:2024/04/28 17:41

题目链接~~>

            开始看这题时第一眼就觉得很难,但是今天做了一下也不过如此,因为一个标记放错了,但是大多数的数据都对 ,wa了好几次,中间差点忍不住 百度一下,以为有什么特殊数据,但是还是忍住了,仔细又看了一次终于把错误找了出来。奋斗

代码:

#include<stdio.h>#include<string.h>int n,m ;int vis[60][60] ;char s[60][60] ;int a[60][60][4] ;int dx[4]={0,-1,0,1},dy[4]={-1,0,1,0} ;void dfs(int x,int y){    int nx,ny ;//开始把 int f=1 ;放在这错了好久。。。。    for(int i=0;i<4;i++)//左 上 右 下      {           nx=x+dx[i] ;           ny=y+dy[i] ;           int f=0 ;           if(nx>=0&&nx<n&&ny>=0&&ny<m&&!vis[nx][ny])            {                 if(!i&&a[x][y][0]&&a[nx][ny][2])                                f=1 ;                 else if(i==1&&a[x][y][1]&&a[nx][ny][3])                                f=1 ;                 else  if(i==2&&a[x][y][2]&&a[nx][ny][0])                                f=1 ;                 else   if(i==3&&a[x][y][3]&&a[nx][ny][1])                                f=1 ;                 if(f)                    {                        vis[nx][ny]=1 ;                        dfs(nx,ny) ;                    }            }       }}int main(){    int i,j ;    int g[12][4]={{1,1,0,0},{0,1,1,0},{1,0,0,1},{0,0,1,1},//存储管道接口                  {0,1,0,1},{1,0,1,0},{1,1,1,0},{1,1,0,1},                  {1,0,1,1},{0,1,1,1},{1,1,1,1}} ;    while(scanf("%d%d",&n,&m)!=EOF)    {           if(n<0||m<0)                   break ;            for(i=0;i<n;i++)                 scanf("%s",s[i]) ;                 memset(vis,0,sizeof(vis)) ;            for(i=0;i<n;i++)               for(j=0;j<m;j++)                 {                     int mx=s[i][j]-'A' ;                     for(int k=0;k<4;k++)                           a[i][j][k]=g[mx][k] ;                 }            int sum=0 ;            for(i=0;i<n;i++)               for(j=0;j<m;j++)                 if(!vis[i][j])                 {                     sum++ ;                     vis[i][j]=1 ;                     dfs(i,j) ;                 }            printf("%d\n",sum) ;    }    return 0 ;}


 

原创粉丝点击