• POJ 3083 Children of the Candy Corn dfs+bfs


    题目连接http://poj.org/problem?id=3083

    题目大意:一看就是基本的迷宫问题,一个是优先往左走,一个优先往右走,还有一个是求最短。

    额。。。。好久没写bfs= =...上来bfs没加vis= =。。。。然后dfs又写错,因为是左右思路相同,我是直接复制的,找了好久一直是re= =、你妹妹的。。。

    用一个全局变量保存朝向,用一个%4来保存结果

    View Code
      1 #include <stdio.h>
      2 #include <string.h>
      3 char map[100][100];
      4 int m,n,sx,sy,dx,dy;
      5 int dir;
      6 int lx[4] = {1,0,-1,0};
      7 int ly[4] = {0,-1,0,1};
      8 int rx[4] = {-1,0,1,0};
      9 int ry[4] = {0,-1,0,1};
     10 int leap = 0;
     11 struct node
     12 {
     13     int x,y,step;
     14 }q[100000];
     15 int is_map(int x,int y)
     16 {
     17     if(x >= 0 &&x < n && y >= 0 && y < m)
     18     return 1;
     19     return 0;
     20 }
     21 
     22 int dfs(int is_left,int x,int y,int step)
     23 {
     24     if(is_map(x,y) == 0)
     25     return 0;
     26     if(map[x][y] == '#')
     27     return 0;
     28     if(map[x][y] == 'E')
     29     return step+1;
     30 
     31     if(is_left)
     32     {
     33         dir = (dir+3)%4;
     34         while(1)
     35         {
     36             int tx,ty;
     37             tx = x+lx[dir];
     38             ty = y+ly[dir];
     39             leap = dfs(1,tx,ty,step+1);
     40             if(leap)
     41             break;
     42             dir = (dir+1)%4;
     43         }
     44     }
     45     else
     46     {
     47         dir = (dir+3)%4;
     48         while(1)
     49         {
     50             int tx,ty;
     51             tx = x+rx[dir];
     52             ty = y+ry[dir];
     53             leap = dfs(0,tx,ty,step+1);
     54             if(leap > 0)
     55             break;
     56             dir = (dir+1)%4;
     57         }
     58     }
     59     return leap;
     60 }
     61 void bfs()
     62 {
     63     int vis[45][45] = {0};
     64     int f,r,i;
     65     f = r = 0;
     66     q[f].x = sx;
     67     q[r].y = sy;
     68     q[r].step = 1;
     69     r++;
     70     while(f<r)
     71     {
     72         struct node temp;
     73         temp = q[f++];
     74         for(i = 0;i < 4;i++)
     75         {
     76             struct node now;
     77             now.x = temp.x+lx[i];
     78             now.y = temp.y+ly[i];
     79             now.step = temp.step+1;
     80             if(is_map(now.x,now.y) && !vis[now.x][now.y])
     81             {
     82                 if(map[now.x][now.y] == 'E')
     83                 {
     84                     printf("%d\n",now.step);
     85                     return;
     86                 }
     87                 vis[now.x][now.y] = 1;
     88                 if(map[now.x][now.y] != '#')
     89                 q[r++] = now;
     90             }
     91         }
     92     }
     93 
     94 }
     95 int main()
     96 {
     97     int i,j,t,lsum,rsum;
     98     leap = 0;
     99     scanf("%d",&t);
    100     while(t--){
    101 
    102     scanf("%d %d",&m,&n);
    103         for(i = 0;i < n;i++)
    104         {
    105             scanf("%s",map[i]);
    106 
    107         }
    108         for(i = 0;i < n;i++)
    109         for(j = 0;j < m;j++)
    110             {
    111                 if(map[i][j] == 'S')
    112                 sx = i,sy = j;
    113                 if(map[i][j] == 'E')
    114                 dx = i,dy = j;
    115             }
    116 
    117 
    118         dir = 0;
    119         leap = 0;
    120         lsum = dfs(1,sx,sy,0);
    121         dir = 0;
    122         rsum = dfs(0,sx,sy,0);
    123         printf("%d %d ",lsum,rsum);
    124         bfs();
    125     }
    126     return 0;
    127 }
  • 相关阅读:
    8u111-jdk-alpine 字体缺少FontConfiguration的NullPointerException错误解决方案
    Mybatis插件原理
    Mybaits 分页
    @requestBody 和@RequestParam
    Mybaits 生产mapper
    powerDesigner 生成SQL时没有注释问题
    HashMap 的 put过程
    Java的锁
    Java1.8 JVM配置 GC日志输出
    Windows 安装两个MYSQL实例
  • 原文地址:https://www.cnblogs.com/0803yijia/p/2758755.html
Copyright © 2020-2023  润新知