十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
typedef struct{
做网站、成都网站制作介绍好的网站是理念、设计和技术的结合。创新互联建站拥有的网站设计理念、多方位的设计风格、经验丰富的设计团队。提供PC端+手机端网站建设,用营销思维进行网站设计、采用先进技术开源代码、注重用户体验与SEO基础,将技术与创意整合到网站之中,以契合客户的方式做到创意性的视觉化效果。
int Col,Row;//迷宫的大小
int arr[Rangle][Rangle]; //0表示障碍,1表示是可走的通道,-1表示外界的围墙
}MazeType;
void InitMaze(MazeType
M,int col,int row)
{
//按照用户的输入的行数row和列数col列的二维数组(元素值为1或0)
//设置迷宫的初值,加上边缘的一圈的值
}
void PrintMaze(MazeType M)
{
//根据已经进行二维数组的标记值来输出迷宫(或者其通路)
}
bool Pass(MazeType M,PosType pos)
{//求解迷宫M中,从Start到end的一条路径
//若存在则返回true,否则返回false
Stack S;
InitStack(S);
PosType curpos=start;//设置当前坐标为入口位置;
int curstep=1;
//当前的步数
bool Find=false;
//是否找到出口
ElemType e;
do{
if(Pass(M,curpos))
{
FootPrint(M,curpos);//在当前位置标记为2
e.step=1;
e.seat=curpos;
e.di=1;//初始化为向右边位置移动
Push(S,e);
if(curpos.c==end.ccurpos.r==end.r)//如果找到了出口则终止,并返回true
{
Find=true;
return Find;
}
else{
curpos=NextPos(curpos,1);
curstep++;
}
}
else{//当前位置不能通过
if(!StackEmpty(S)){
Pop(S,e);//将已经走过的最近位置弹出,数据保存在e中
while(e.di==4!(StackEmpty(S))){
MarkPrint(M,e.seat);//留下不能通过的标记
Pop(S,e);
curstep--;
}//while
if(e.di4)//不能通过则改变方向
{
e.di++;//方向顺时针改变一下
Push(S,e);
curpos = NextPos(e.seat,e.di); //求下一个节点
}
}
}
}while(!StackEmpty(S)!Find);
//(!StackEmpty(S)!Find);//当栈不为空且没有找到出口
return
false;//没有找到出口则返回false
这个可以用 堆栈 来完成。
用堆栈的基本思路就是。
设置一个起点A。将 A 入栈 。
从A开始找到第一个可以达到的点B。将 B 入栈 。
如果B无路可走。则在A点处重新换一个可达到的点。否则继续 2-3 。直到达到终点。或者五路可走。
详细的解释,这儿有一篇博文:
int[][] data是你的迷宫数组,返回值是路径总条数,不需要递归
public int findWayCount(int[][] data) {
int[][] way = new int[data.length][];
for (int m = 0; m data.length; m++) {
way[m] = new int[data[m].length];
for (int n = 0; n data[m].length; n++) {
if (data[m][n] == 0) {
way[m][n] = 0;
} else if (m == 0 n == 0) {
way[m][n] = data[0][0];
} else if (m == 0) {
way[m][n] = way[m][n - 1];
} else if (n == 0) {
way[m][n] = way[m - 1][n];
} else {
way[m][n] = way[m][n - 1] + way[m - 1][n];
}
}
}
#includestdio.h
#includegraphics.h
#includeconio.h
typedef struct{
int x,y;
int dir;
}pos,elem;
typedef struct{
elem* b,* t;
int size;
}stack;
void initstack(stack* s)
{
s-b=(elem*)malloc(50*sizeof(elem));
if(s-b){
s-t=s-b;
s-size=50;
return;
}
exit(0);
}
void push(stack* s,elem* e)
{
*s-t=*e;
s-t++;
}
void pop(stack* s,elem* e)
{
*e=*--s-t;
}
void gettop(stack* s,elem* e)
{
*e=*(s-t-1);
}
void clearstack(stack* s)
{
s-t=s-b;
}
int stackempty(stack* s)
{
return !(s-t-s-b);
}
int destroystack(stack* s)
{
free(s-b);
free(s);
return 1;
}
int mg[10][10]={
{-1,-0,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-0,-0,-0,-1,-0,-0,-0,-0,-1},
{-1,-0,-1,-0,-1,-0,-1,-1,-0,-1},
{-1,-0,-1,-1,-0,-0,-0,-0,-0,-1},
{-1,-0,-0,-1,-0,-1,-1,-0,-0,-1},
{-1,-0,-0,-0,-0,-0,-1,-0,-0,-1},
{-1,-0,-1,-0,-0,-0,-0,-1,-0,-1},
{-1,-0,-1,-1,-0,-0,-0,-1,-0,-1},
{-1,-0,-0,-0,-1,-0,-0,-1,-0,-0},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}
};
void step(stack* s,pos* cur,stack* result);
void savepath(stack* s,pos* cur,stack* result);
void draw(int y,int x);
void step(stack* s,pos* cur,stack* result)
{
if(stackempty(result)||s-t-s-bresult-t-result-b){
for(cur-dir++;cur-dir5;cur-dir++){
setfillstyle(SOLID_FILL,15);
switch(cur-dir){
case 1:
if(!mg[cur-y-1][cur-x]){
mg[cur-y][cur-x]=1;
push(s,cur);
cur-y--;
cur-dir=0;
draw(cur-y,cur-x);
return;
}
break;
case 2:
if(!mg[cur-y][cur-x+1]){
mg[cur-y][cur-x]=1;
push(s,cur);
cur-x++;
cur-dir=0;
draw(cur-y,cur-x);
return;
}
break;
case 3:
if(!mg[cur-y+1][cur-x]){
mg[cur-y][cur-x]=1;
push(s,cur);
cur-y++;
cur-dir=0;
draw(cur-y,cur-x);
return;
}
break;
case 4:
if(!mg[cur-y][cur-x-1]){
mg[cur-y][cur-x]=1;
push(s,cur);
cur-x--;
cur-dir=0;
draw(cur-y,cur-x);
return;
}
break;
default:
exit(0);
}
}
}
mg[cur-y][cur-x]=0;
setfillstyle(SOLID_FILL,0);
draw(cur-y,cur-x);
pop(s,cur);
}
void savepath(stack* s,pos* cur,stack* result)
{
pos* top=s-t;
if(stackempty(result)){
push(result,cur);
while(tops-b)
push(result,--top);
}
else if(result-t-result-bs-t-s-b){
clearstack(result);
push(result,cur);
while(tops-b)
push(result,--top);
}
}
void draw(int y,int x)
{
bar(100+15*x,100+15*y,115+15*x,115+15*y);
}
void main(void)
{
int i;
int x,y;
int gd=DETECT,gm;
stack* s=NULL;
stack* result=NULL;
pos* cur=NULL;
initgraph(gd,gm,"");
for(x=0;x10;x++)
for(y=0;y10;y++){
if(mg[y][x]){
setfillstyle(SOLID_FILL,3);
draw(y,x);
}
}
result=(stack*)malloc(sizeof(stack));
initstack(result);
s=(stack*)malloc(sizeof(stack));
cur=(pos*)malloc(sizeof(pos));
initstack(s);
cur-x=1;
cur-y=0;
cur-dir=0;
push(s,cur);
cur-x=1;
cur-y=1;
cur-dir=1;
do{
if(cur-x==9cur-y==8)
savepath(s,cur,result);
step(s,cur,result);
}while(!stackempty(s));
if(stackempty(result))
printf("no way available");
else{
int ch=0;
printf("following is the shortest path:\n");
while(!stackempty(result)){
pop(result,cur);
setfillstyle(SOLID_FILL,15);
draw(cur-y,cur-x);
if(ch5){
putchar('\n');
ch=0;
}
printf("(%d,%d,%d) ",cur-x,cur-y,cur-dir);
ch++;
}
}
printf("\n");
destroystack(s);
destroystack(result);
free(cur);
printf("Press any key to end");
while(!kbhit());
closegraph();
}
这是我之前课程设计做的一个迷宫,Swing做的,发在javaeye的博客上了,有打包成jar的,安装了jdk可以直接双击运行,有源码,还有我写的一个说明文档,网址如下:
自己下载下吧,我就不给你发到邮箱了。