迷宫问题

https://vjudge.net/contest/367192#problem/A

思路:我想的是利用类似链表的思想,在bfs中每次更新时符合要求的位置咬住原来的位置,ma[5*(x-1)+y]=5*(cur.x-1)+cur.y,以终点为起点,最后倒序输出。

AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<map>
using namespace std;
int vis[6][6],maze[6][6],ma[36];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
struct node{
    int x,y;
};
void bfs(){
    node cur,ne;
    queue<node>sui; 
    cur.x=5;
    cur.y=5;
    vis[5][5]=1;
    sui.push(cur);
    ma[25]=25;
    while(!sui.empty()){
        cur=sui.front();
        sui.pop();
        for(int i=0;i<4;i++){
            int x=cur.x+dx[i];
            int y=cur.y+dy[i];
            if(maze[x][y]==0&&vis[x][y]==0&&x>0&&x<=5&&y<=5&&y>0){
                ne.x=x;
                ne.y=y;
                vis[x][y]=1;
                ma[5*(x-1)+y]=5*(cur.x-1)+cur.y;
                sui.push(ne);
                if(x==1&&y==1) return ; 
            } 
        }
    }
} 
int main(){
    for(int i=1;i<=5;i++){
        for(int j=1;j<=5;j++){
            cin>>maze[i][j];
        }
    }
    bfs();
    int idex=1;
    while(ma[idex]!=idex){
        if(idex%5==0){
            printf("(%d, %d)
",idex/5-1,4);
        }else{
            printf("(%d, %d)
",idex/5,idex%5-1);
        }
        idex=ma[idex];
    }
    printf("(%d, %d)",4,4);
    return 0;
} 
原文地址:https://www.cnblogs.com/xinpingqihe/p/12670168.html