zoukankan      html  css  js  c++  java
  • 最少步数,广搜

    这个题,需要处理的细节太多了

    框架5,6分钟就写好了,然后开始各种报错

    处理细节大概花了3个小时

    #include<iostream>
    #include<stdio.h>
    #include<queue>
    #include<cstring>
    using namespace std;
    struct node
    {
    int x;
    int y;
    int step;
    };
    queue<node>Q;
    int f[4][2]={0,-1,0,1,-1,0,1,0};
    int map[9][9]=
    {
    1,1,1,1,1,1,1,1,1,
    1,0,0,1,0,0,1,0,1,
    1,0,0,1,1,0,0,0,1,
    1,0,1,0,1,1,0,1,1,
    1,0,0,0,0,1,0,0,1,
    1,1,0,1,0,1,0,0,1,
    1,1,0,1,0,1,0,0,1,
    1,1,0,1,0,0,0,0,1,
    1,1,1,1,1,1,1,1,1
    };
    int bfs(int x1,int y1,int x2,int y2)
    {
    int a[9][9];
    memset(a,0,sizeof(a));    

    /*坑点之一,每次处理过一组数据之后,都要重新把a数组初始化,

    (否则就会出现,只有第一组数据,是对的,后边的都会报错,这样a数组就失去了它存在的价值)*/
    int x,y;
    node q;
    q.x=x1;
    q.y=y1;
    q.step=0;
    Q.push(q);
    a[x1][y1]=1;
    while(!Q.empty())
    {
    q=Q.front();
    if(q.x==x2&&q.y==y2)
    {
    break;
    }

    /*这个if 不能直接在if里边直接return q.step

    因为,如果终点是‘1’,就会无法输出*/
    Q.pop();
    for(int i=0;i<4;i++)
    {
    x=q.x+f[i][0];
    y=q.y+f[i][1];
    if(x>=0&&x<9&&y>=0&&y<9&&a[x][y]==0&&map[x][y]==0)
    {
    node e={x,y,q.step+1};
    Q.push(e);
    a[x][y]=1;
    }
    }

    }
    if(Q.empty())
    return -1;

    /*这个if就是用来处理 刚刚那个if所不能处理的情况*/
    while(!Q.empty())
    Q.pop();

    /*清空队列,为下次的调用

    我第一次就是没有清空,导致下一次的输出比实际大*/
    return q.step;
    }
    int main()
    {
    int T,x1,y1,x2,y2;
    scanf("%d",&T);
    while(T--)
    {
    scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    int L=bfs(x1,y1,x2,y2);
    printf("%d ",L);
    }
    return 0;
    }

  • 相关阅读:
    Jenkins参数化构建
    python笔记
    jenkins定时任务
    技巧:Vimdiff 使用
    clover如何使用UEFI引导和EFI驱动选择
    Broadcast BCM94322 用ubuntu修改ID
    MAC实现睡眠和休眠唤醒
    MAC的睡眠模式介绍
    linux 用dd命令读写引导区文件
    MAC下打开FTP服务
  • 原文地址:https://www.cnblogs.com/tianxxl/p/6497016.html
Copyright © 2011-2022 走看看