zoukankan      html  css  js  c++  java
  • POJ 3083 Bfs+Dfs

    注意求最短路的时候用Bfs。

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int w,h,ex,ey,sx,sy;
    int map[100][100],can[100][100];
    struct vid{
       
      int x,y,step;
    }queue[5000];
    int zan[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
    int dirl[4][2]={0,-1,-1,0,0,1,1,0},dirr[4][2]={0,1,1,0,0,-1,-1,0};
    int dfsr(int dstep,int x,int y,int di )
    {
      int i,temp1,temp2;
      
      
      for(i=0;i<4;i++)
      {
          temp1=x+dirr[i][0];
          temp2=y+dirr[i][1];
                  
        if((temp1>=0)&&(temp1<h)&&(temp2>=0)&&(temp2<w))
        {
          if(dfsr(dstep+1,x+dirr[i][0],y+dirr[i][1],i))
            return dstep;
          else
            return 0;
        }
    
      }
      return 0;
    
    }
    int dfsl(int dstep,int x,int y,int di )
    {
      
      int i,temp1,temp2;
      
      for(i=0;i<4;i++)
      {
          temp1=x+dirl[i][0];
          temp2=y+dirl[i][1];
                  
        if((temp1>=0)&&(temp1<h)&&(temp2>=0)&&(temp2<w))
        {
          if(dfsl(dstep+1,temp1,temp2,i))
            return dstep;
          else
            return 0;
        }
    
      }
    
      return 0;
    }
    int bfs()
    {
    
    
    if (sx == ex && sy == ey)
        {
            
            return 1;
        }
      int t,ww,x,y,t1,t2;
      t=ww=1;
      queue[t].x=sx;
      queue[t].y=sy;
      queue[t].step=0;
      can[sx][sy]=1;
      while(t<=ww&&!can[ex][ey])
      {
      
        x=queue[t].x;
        y=queue[t].y;
        for(int i=0;i<4;i++)
          if((!map[x+zan[i][0]][y+zan[i][1]])&&(!can[x+zan[i][0]][y+zan[i][1]]))	
            {
              
              t1=x+zan[i][0];
              t2=y+zan[i][1];
              if(t1>=0&&(t1<h)&&(t2>=0)&&(t2<w)&&(!map[t1][t2])&&(!can[t1][t2]))
              {
              
                queue[++ww].x=t1;
                queue[ww].y=t2;
                queue[ww].step=queue[t].step+1;
                can[t1][t2]=1;
              }
            }
          t++;
      }
      return queue[ww].step+1;
    }
    int main ()
    {
      int t;
      char c;
      scanf("%d",&t);
      getchar();
      while(t--)
      {
    
        scanf("%d%d",&w,&h);
        getchar();
        for(int i=0;i<h;i++)
        {
          for(int j=0;j<w;j++)
          {
            can[i][j]=0;
            c=getchar();
            if(c=='#')
              map[i][j]=1;
            else if(c=='.')
              map[i][j]=0;
            else if(c=='S')
            {
              map[i][j]=0;
              sx=i,sy=j;
            }
            else
              if(c=='E')
              {
                map[i][j]=0;
                ex=i;ey=j;
              }
          }
          getchar();
        }
      //	init();
      //	dfsr();
      //	printf("%d ",bfs());
        printf("%d %d %d
    ",dfsl(0,sx,sy,0)+1,dfsr(0,sx,sy,0)+1,bfs());
      }
    
    
      return 0;
    }
  • 相关阅读:
    delphi 属性 参数 新注释
    delphi query阻塞执行 长时间执行sql的解决办法
    FDLocalSQL
    C# Webservice
    vmware的centos 6虚拟机如何共享文件夹?
    tomcat如何配置启动时自动部署webapps下的war包
    tomcat如何配置context的docBase
    windows本地启动tomcat闪退
    jfinal 字节流存储文件以及解、压缩工具类
    java try catch 异常后还会继续执行吗
  • 原文地址:https://www.cnblogs.com/icode-girl/p/4592018.html
Copyright © 2011-2022 走看看