数据结构问题(1)急!!!!! 有一个迷宫,m*n格,0表示可以通过,1表示不能通过,入口为(1,1),出口为(1,n),找出一条从入口到出口的路径,那位大哥能给出一个程序或分析一下算法,最好详细点,给高分! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这要看选择的通过规则了。如象棋中车和马的走法显然不同.走路规则允许从迷宫的一点其它任何一点的话,走法就是:(1,0)->(1,N) http://dev.csdn.net/develop/article/25/25075.shtmhttp://dev.csdn.net/develop/article/25/25076.shtm #include<stdlib.h>#include<fstream.h>struct InterSection //路口的结构定义{ int left; //向左 int forward; //向前 int right; //向右};class Maze{private: int mazeSize; //路口个数 int Exit; //出口 InterSection* intSec; //路口集合public: Maze(char *filename); int TravMaze(int intSecValue); //搜索函数 //~Maze();};Maze::Maze(char *filename){ ifstream fin; fin.open(filename,ios::in||ios::nocreate); if(!fin) { cerr<<"数据文件无法打开!"; exit(1); } fin>>mazeSize; //读入路口个数 intSec=new InterSection[mazeSize+1]; for(int i=1;i<=mazeSize;i++) fin>>intSec[i].left>>intSec[i].forward>>intSec[i].right; fin>>Exit; fin.close();}int Maze::TravMaze(int intSecValue){ if(intSecValue>0) { if(intSecValue==Exit) { cout<<intSecValue<<"<=="; return 1; } else if(TravMaze(intSec[intSecValue].left)) { cout<<intSecValue<<"<=="; return 1; } else if(TravMaze(intSec[intSecValue].forward)) { cout<<intSecValue<<"<=="; return 1; } else if(TravMaze(intSec[intSecValue].right)) { cout<<intSecValue<<"<=="; return 1; } } return 0;}void main(){ char fileName[20]={"Maze.dat"}; Maze m(fileName); int start=1; if(m.TravMaze(start)) cout<<endl<<"迷宫的一条路径如上所示:"; else cout<<"此迷宫无通路:"<<endl;} m,n范围未知,不推荐DFS,还是BFS吧。还是那句话,自己看书。 无须递归。用个While就可,注意环线,记住走过的路线,直到端点位置为(1,n)就可。方法自己去想想就能得到。 小弟在此求各位大神帮助 无BOM头的UTF-8文件如何判断 用WinExec打开Word文件 我为什么不能修改XML文件里的值呀??????大家帮偶看看呀 vc编程中如何调用HTML 怎样替换工具条的图片????????????????? 有关VC的ODBC数据库的问题 C/S模式斗地主游戏询价 关于winsock select 模式,该怎么用啊 请问classwizard生成的文件*clw坏了有办法修复么? 两个ie打开一个控件,一个改变,另一个也会跟着改变,怎么回事? 数据结构问题(3)!急!!!!!轮渡问题!
走路规则允许从迷宫的一点其它任何一点的话,走法就是:(1,0)->(1,N)
http://dev.csdn.net/develop/article/25/25076.shtm
#include<fstream.h>
struct InterSection //路口的结构定义
{
int left; //向左
int forward; //向前
int right; //向右
};class Maze
{
private:
int mazeSize; //路口个数
int Exit; //出口
InterSection* intSec; //路口集合
public:
Maze(char *filename);
int TravMaze(int intSecValue); //搜索函数
//~Maze();
};
Maze::Maze(char *filename)
{
ifstream fin;
fin.open(filename,ios::in||ios::nocreate);
if(!fin)
{
cerr<<"数据文件无法打开!";
exit(1);
}
fin>>mazeSize; //读入路口个数
intSec=new InterSection[mazeSize+1];
for(int i=1;i<=mazeSize;i++)
fin>>intSec[i].left>>intSec[i].forward>>intSec[i].right;
fin>>Exit;
fin.close();
}
int Maze::TravMaze(int intSecValue)
{
if(intSecValue>0)
{
if(intSecValue==Exit)
{
cout<<intSecValue<<"<==";
return 1;
}
else if(TravMaze(intSec[intSecValue].left))
{
cout<<intSecValue<<"<==";
return 1;
}
else if(TravMaze(intSec[intSecValue].forward))
{
cout<<intSecValue<<"<==";
return 1;
}
else if(TravMaze(intSec[intSecValue].right))
{
cout<<intSecValue<<"<==";
return 1;
}
}
return 0;
}
void main()
{
char fileName[20]={"Maze.dat"};
Maze m(fileName);
int start=1;
if(m.TravMaze(start))
cout<<endl<<"迷宫的一条路径如上所示:";
else
cout<<"此迷宫无通路:"<<endl;
}
方法自己去想想就能得到。