现在的位置: 首页 > 综合 > 正文

HDU 1198 Farm Irrigation

2019年02月26日 ⁄ 综合 ⁄ 共 1058字 ⁄ 字号 评论关闭

题目链接~~>

            开始看这题时第一眼就觉得很难,但是今天做了一下也不过如此,因为一个标记放错了,但是大多数的数据都对 ,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 ;
}



 

【上篇】
【下篇】

抱歉!评论已关闭.