倾家荡产求助。。急
在二维迷宫里面,从出发点开始,每个点按四邻域算,按照右,上,左,下的顺序搜索下一落脚点,有路则进,无路即退,前点再从下一个方向搜索,即可构成一有序模型.下表即迷宫
{ 1,1,1,1,1,1,1,1,1,1,
0,0,0,1,0,0,0,1,0,1,
1,1,0,1,0,0,0,1,0,1,
1,0,0,0,0,1,1,0,0,1,
1,0,1,1,1,0,0,0,0,1,
1,0,0,0,1,0,0,0,0,0,
1,0,1,0,0,0,1,0,0,1,
1,0,1,1,1,0,1,1,0,1,
1,1,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1}
这个迷宫 请帮忙用
双向广度搜索 分支定界 A*算法 三种算法各解决一下
用VB++写 万分感谢。。。。
问题点数:0、回复次数:15Top
1 楼buupig(布欧猪)回复于 2005-06-02 22:34:27 得分 0
求 求Top
2 楼eastred(东方红)回复于 2005-06-03 14:35:52 得分 0
“VB++” 这个是什么??Top
3 楼buupig(布欧猪)回复于 2005-06-03 15:43:25 得分 0
写错了 是VC++Top
4 楼buupig(布欧猪)回复于 2005-06-03 16:20:56 得分 0
帮忙哇 这个程序对各位来说 简单 对小弟我是一点也不懂啊Top
5 楼ukyo1(**)回复于 2005-06-03 18:41:45 得分 0
VB++ (-_-)||
我没时间写了,而且程序比较复杂,网上的相关文章很多,你可以找找看,自己动手丰衣足食:)Top
6 楼Summer006(脸都丢尽了!闭关修练。。。。)回复于 2005-06-04 12:06:19 得分 0
以前做过,现在忘了~Top
7 楼xtjqu(LPVOID)回复于 2005-06-04 12:36:45 得分 0
咱们这里怎么成了写门代写作业的地方?
改改名吧,叫作业论坛Top
8 楼wqs6(竹山)回复于 2005-06-04 19:39:20 得分 0
有点像八皇后问题,网上肯定有类似算法
你找找看吧,要重新写一个好像有点困难!Top
9 楼perfect1()回复于 2005-06-04 19:51:04 得分 0
清华的数据结构上有
以前做过.Top
10 楼icansaymyabc(学习与进步)回复于 2005-06-06 18:00:33 得分 0
#include "stdafx.h"
//要在vc 2005 中编译,因为 vc 2005 支持中文变量
//用其他编译器的话需要你自己把文中全部中文变量替换成英文变量
#include <stdlib.h>
#include <conio.h>
#include <windows.h>//这个头文件仅提供Sleep()的声明,不用Sleep的话可以去掉这一行
enum 位置状态{空地=0,墙=1,尝试,死路=4,活路=9};
class 迷宫{ static char c地图[10][10];
public:
static int i起点x, i起点y, i终点x, i终点y;
void 标记地图(int x,int y, 位置状态 v){ c地图[y][x]=v;}
void show(int 显示延迟=0){ if(显示延迟<0){ printf("\n\t按任意键显示下一步......");getch();}
else if(显示延迟)Sleep(显示延迟);//如果没有Sleep函数,则可把这里改成 getch();变成按一下显示一下
system("cls"); static int count;
printf("\n>>第 %d 步:\n\t************************************\n\t* *\n",count++);
for(int j,i=0;i<10;i++){printf("\t* ");for(j=0;j<10;j++)printf(" %d ",c地图[i][j]);printf (" *\n");}
printf("\t* *\n\t************************************\n\n",count++); }
bool Is空地(int x,int y){return (x>=0&&x<10&&y<10&&y>=0)?c地图[y][x]==位置状态::空地:false;}
bool Is终点(int x,int y){return x==i终点x&&y==i终点y;} };
int 迷宫::i起点x=0, 迷宫::i起点y=1, 迷宫::i终点x=9, 迷宫::i终点y=5;
char 迷宫::c地图[10][10]={1,1,1,1,1,1,1,1,1,1, 0,0,0,1,0,0,0,1,0,1, 1,1,0,1,0,0,0,1,0,1, 1,0,0,0,0,1,1,0,0,1, 1,0,1,1,1,0,0,0,0,1, 1,0,0,0,1,0,0,0,0,0, 1,0,1,0,0,0,1,0,0,1, 1,0,1,1,1,0,1,1,0,1, 1,1,0,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,1,1,1};
class 堆栈 {struct {int x,y;} dat[100]; int top;
public: 堆栈():top(-1){}
void push(int sx, int sy){ dat[++top].x=sx;dat[top].y=sy;}
bool pop(int *px=0, int *py=0){if(top<0)return false;else{if(px)*px=dat[top].x;if(py)*py=dat[top].y;top--; return true;}}};
class 迷宫探索者:private 迷宫{堆栈 rec;
public: bool 标记地图时显示一下; int idelay;
void 标记地图(int x,int y, 位置状态 v){迷宫::标记地图(x,y,v); if(标记地图时显示一下)show(idelay);}
bool 探路(int 测试起点x, int 测试起点y);
bool 去探路吧();
private: int 看看四周(int x, int y); };
bool 迷宫探索者::去探路吧(){ int x=i起点x, y=i起点y; return 探路(x,y);}
bool 迷宫探索者::探路(int 测试起点x, int 测试起点y){int &x=测试起点x, &y=测试起点y,nx,ny;
if(Is终点(x,y)){标记地图(x,y,活路);return true;}
int t;if((t=看看四周(x, y))==0){标记地图(x,y,死路); return false;}else{
标记地图(x,y,尝试); for(int i=0;i<t;i++){ rec.pop(&nx,&ny);if(探路(nx,ny)){标记地图(x,y,活路);return true;}}
标记地图(x,y,死路); return false;}}
int 迷宫探索者::看看四周(int x, int y){int r=0;
//特别说明,下面4条语句相当关键,其顺序可以随意调整,不同的顺序会找到不同的通路。
if(Is空地(x ,y-1)){rec.push(x ,y-1);r++;}
if(Is空地(x-1,y )){rec.push(x-1,y );r++;}
if(Is空地(x ,y+1)){rec.push(x ,y+1);r++;}
if(Is空地(x+1,y )){rec.push(x+1,y );r++;}
return r;}
int _tmain(int argc, _TCHAR* argv[]){
迷宫探索者 我;
我.标记地图时显示一下 = true;
我.idelay = 618;
if(我.去探路吧())printf("\n!!!!恭喜我走通迷宫!!!!\n");else printf("\n!!!谴责不会走迷宫的我吧!!!\n");
return 0;
}
Top
11 楼icansaymyabc(学习与进步)回复于 2005-06-06 18:03:14 得分 0
int _tmain(int argc, _TCHAR* argv[]){
这一句换成
int main(int argc, char * argv[]){
效果一样Top
12 楼sboom(+-LingCh-+)(爱美人不爱VC)回复于 2005-06-07 02:24:10 得分 0
作业来的。Top
13 楼BeginnerCpp(禅)回复于 2005-06-07 11:08:32 得分 0
to : 学习与进步 :
要在vc 2005 中编译,因为 vc 2005 支持中文变量
======
晕,
真的吗?
VC2005现在有破解的企业版吗?
Top
14 楼icansaymyabc(学习与进步)回复于 2005-06-07 12:02:53 得分 0
VC2005现在的最新版是 beta2,Team 版的,比企业版还好。 正式版还没出来Top
15 楼hhoking(妙手仁心)回复于 2005-06-07 13:23:38 得分 0
长见识了,还有支持中文变量的编译器,我得跟进了,娃哈哈。Top




