【在线等】【迷宫问题】【C语言】【急求】
问题描述: 给定一个迷宫,0为可走,1为不可走,写一个程序,判断最短通路是多少。 是最短通路,不是有没有通路哦!!! 读入 迷宫的行与列,然后是 0 和1 代表通路 死路 必须用BFS或者DFS算法,谢谢大家了。 在线等啊 急求!!!
补充:类似二楼的答案,是不行滴。。。。
我要求是由用户输入,不是产生随机数
问题描述: 给定一个迷宫,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]的实根 麻烦写下程序和关键步骤的说明 谢谢