当前位置:编程学习 > C/C++ >>

【在线等】【迷宫问题】【C语言】【急求】

问题描述: 给定一个迷宫,0为可走,1为不可走,写一个程序,判断最短通路是多少。 是最短通路,不是有没有通路哦!!! 读入 迷宫的行与列,然后是 0 和1 代表通路 死路 必须用BFS或者DFS算法,谢谢大家了。 在线等啊 急求!!!
补充:类似二楼的答案,是不行滴。。。。
我要求是由用户输入,不是产生随机数
答案:…………
#include <iostream>
using namespace std;
typedef struct lv
{
    int i;
    int j;
    struct lv* up;
}lv;
lv sp[3000]= {};
int k=0,v=0;
int check(int maze[][30],int i,int j,lv *p)
{
    if(maze[i][j]==0)
    {
        k++;
        sp[k].i=i;
        sp[k].j=j;
        sp[k].up=p;
        maze[i][j]=2;
    }
}
int BFS(int maze[][30],int fx,int sy,int n,int m)
{
    int i,j;
    for(; v<=k; v++)
    {
        i=sp[v].i;
        j=sp[v].j;
        if(i==fx && j==sy)return true;
        if(j+1<m )check(maze,i,j+1,&sp[v]);
        if(i+1<n )check(maze,i+1,j,&sp[v]);
        if(j-1>=0 )check(maze,i,j-1,&sp[v]);
        if(i-1>=0 )check(maze,i-1,j,&sp[v]);
    }
    return false;
}
int main()
{
    int maze[30][30];
    int n,m,i,j,fx,sy;
    cin>>n>>m;//输入迷宫长宽
    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
            cin>>maze[i][j];
    cin>>sp[0].i>>sp[0].j;//输入迷宫入口
    sp[0].i--,sp[0].j--;//输入下标从1开始
    cin>>fx>>sy;//输入迷宫出口
    if(BFS(maze,fx-1,sy-1,n,m))//广搜
    {
        lv *p=&sp[v];
        int len=0;
        while(p!=sp)//回溯
        {
            len++;
            maze[p->i][p->j]=3;
            p=p->up;
        }
        cout<<len<<endl;
    }
    else cout<<"FAIL!"<<endl;
    return 0;
}
其他:另外,《动感新势力》做的第七部剧场版《迷宫的十字路》片尾的MV也是以【语言】英语 【唱片公司】GIZA 【发行时间】2002-01-11 【专辑介绍】这是

上一个:AL-RCJ仿真足球C语言程式 要求写一个三人的团队c语言
下一个:c语言 求方程x^3-2x-5=0在区间[1.5,2.5]的实根 麻烦写下程序和关键步骤的说明 谢谢

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,