程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> POJ 3984 迷宮(BFS),poj3984迷宮bfs

POJ 3984 迷宮(BFS),poj3984迷宮bfs

編輯:C++入門知識

POJ 3984 迷宮(BFS),poj3984迷宮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)\n");
    for(int i=0;i<ans.s;i++)
    {
        x+=dx[ans.direc[i]];
        y+=dy[ans.direc[i]];
        printf("(%d, %d)\n",x,y);
    }
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved