zoukankan      html  css  js  c++  java
  • 第一次用DFS做给坑了,第二次BFS又给坑了。纪念一下 #杭电1312

     1 #include "stdio.h"
     2 #include "queue"
     3 #include "algorithm"
     4 #include "iostream"
     5 using namespace std ;
     6 #define check(x,y)(x>0&&x<=hy&&y>0&&y<=wx)  //判断是否在地图内   
     7 char map[1010][1010];                       //地图 
     8 int wx,hy,sum;                              
     9 int dx[4]={0,0,1,-1};                       //方向的变化 
    10 int dy[4]={1,-1,0,0};
    11 struct node {         
    12     int x;
    13     int y;
    14 };
    15 void bfs(int x1,int y1){
    16     sum=1;
    17     queue<node>q;                           //创建一个结构体队列 
    18     node start,next;                        //创建结构体  第一步 以及后一步的结构体  结构体存放坐标 
    19     start.x=x1;
    20     start.y=y1;
    21     q.push(start);                          //把点存入队列中
    22     while (!q.empty()){                     //判断队列是否为空 
    23         start=q.front();                    //查找第一个结构体的值 
    24         q.pop();                            //删除队首元素 
    25         for (int i = 0 ; i < 4; i++){
    26             next.x=start.x+dx[i];
    27             next.y=start.y+dy[i];
    28             if (check(next.x,next.y)&& map[next.x][next.y]=='.'){
    29                 map[next.x][next.y]='#';
    30                 sum++;
    31                 q.push(next);
    32             }
    33         } 
    34     } 
    35 }
    36 
    37 int main (){
    38     int n,m;
    39     while (~scanf ("%d%d",&wx,&hy)){
    40         if (wx==0&&hy==0)break;
    41         for (int i = 1 ; i <= hy ; i++){
    42             for (int j = 1 ; j <= wx ; j++){
    43                 cin>>map[i][j];
    44                 if (map[i][j]=='@'){
    45                     n=i;
    46                     m=j;
    47                 }
    48             }
    49         }
    50         sum=0;
    51         bfs(n,m);
    52         printf ("%d
    ",sum);
    53     }
    54 }

         一开始输入第一个案例,但输出只有1的时候。我很疑惑(黑人问号脸???),但还是回过头去重新把思路理了一遍。(=  =)还是输出1,后来索性就把全部的案例都试一下。发现行数和列数相同的情况下,我的输出是正确的(伏笔伏笔)。我没有太在意,还是自顾自的修改自己的代码。经过长达30分钟的思考还是没能找到错误,没办法只得调试,在调试第一个案例的时候,我发现我BFS里面的判断语句居然没有一次执行下去的。思前想后,我决定check给删了,然后再执行。!!!居然输出了 正确的解???思考了一会后我终于发现了,i 是代表y的,而 j 是代表 x 的,所以我要么把这两的值换一下,要么把我的check函数里面x的越界判断与y的越界判断换一下,其实前面一种比较好理解,而且思路看的很清晰,但我还是用了后者,就当给自己一个教训吧。

  • 相关阅读:
    常见数据结构的Java实现
    ASP.NET WEB API的服务托管(Self-HOST)
    Twitter Bootstrap3小结
    RESTful API后台系统架构设计(Java)
    同步函数的异步化
    C#并行库(TaskParallelLibrary)用法小结
    RestSharp用法小结
    如何选择JAVA培训机构,兼议什么样的人适合培训机构
    从零开始理解JAVA事件处理机制(3)
    简单实用UML关系图解
  • 原文地址:https://www.cnblogs.com/AChappy/p/11954757.html
Copyright © 2011-2022 走看看