zoukankan      html  css  js  c++  java
  • POJ 3984 迷宫(BFS)

    入门BFS,第一次做,部分借鉴了大牛的

    #include <iostream>
    #include <cstdio>
    #include <queue>
    using namespace std;
    
    int a[5][5];
    bool visit[5][5];
    int dx[4]={0,1,0,-1}; // 四个方向:0为右,1为下,2为左,3为上
    int dy[4]={1,0,-1,0};
    
    struct Node
    {
        int x;
        int y;
        int s; // 路径长度
        int direc[30]; //记录方向
    }node,next;
    bool judge(int x,int y)
    {
        if(x<0 || x>4 || y<0 || y>4)
            return true;
        if(visit[x][y]==true || a[x][y]==1)
            return true;
        visit[x][y]=true;  // 访问后标记一下
        return false;
    }
    Node bfs()
    {
        queue<Node>q;
        visit[node.x][node.y]=true;
        q.push(node);
        while(!q.empty())
        {
            node=q.front();
            if(node.x==4 && node.y==4)
                return node;
            q.pop();
            for(int i=0;i<4;i++) // 判断四个方向
            {
                next=node;
                next.x=node.x+dx[i];
                next.y=node.y+dy[i];
                if(judge(next.x,next.y))
                    continue;
                next.direc[node.s]=i;
                next.s=node.s+1;
                q.push(next);
            }
        }
    }
    int main()
    {
        //freopen("in.txt","r",stdin);
        for(int i=0;i<5;i++)
            for(int j=0;j<5;j++)
                scanf("%d",&a[i][j]);
        Node ans=bfs();
        int x=0,y=0;
        printf("(0, 0)
    ");
        for(int i=0;i<ans.s;i++)
        {
            x+=dx[ans.direc[i]];
            y+=dy[ans.direc[i]];
            printf("(%d, %d)
    ",x,y);
        }
        return 0;
    }
  • 相关阅读:
    个人冲刺二(2)
    个人冲刺二(1)
    三个和尚观后感
    每日总结
    个人冲刺(10)
    个人冲刺(9)
    个人冲刺(8)
    个人冲刺(7)
    个人冲刺(6)
    下次视频面试前把电脑摄像头擦干净吧
  • 原文地址:https://www.cnblogs.com/pach/p/5730450.html
Copyright © 2011-2022 走看看