zoukankan      html  css  js  c++  java
  • 迷宫问题

    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;
    } 
  • 相关阅读:
    Linux系统下ZIP文件解压和压缩命令
    解析XML文件
    数组和集合之间的转换
    数据库密码到期修改密码
    Linux系统中启动jar程序
    JSONArray依赖包
    多态性
    接口----interface
    抽象类
    final关键字
  • 原文地址:https://www.cnblogs.com/xinpingqihe/p/12670168.html
Copyright © 2011-2022 走看看