迷宫问题怎么从文件中java读取文件乱码问题迷宫

用栈实现的迷宫问题 - CSU蛋李 - 博客园
posts - 118, comments - 14, trackbacks - 0, articles - 0
迷宫问题中为了保证任何位置上都能沿原路退回,显然需要用一个先进后出的结果来保存从入口到当前位置的路径。因此,在迷宫通路的算法中应用&栈&也是自然而然的事情
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define MYOVERFLOW -2
typedef int S
typedef struct{
//通道块位置的横坐标
//通道块位置的纵坐标
//通道块是否可行的标志
typedef struct{
//通道块在路径上的&序号&
//通道块在迷宫中的&坐标位置&
//从此通道块走向下一通道块的&方向&
//栈的元素类型
typedef struct{
SElemtype *base;//在栈构造之前和销毁之后,base的值为NULL
SElemtype *//栈顶!d=====( ̄? ̄*)b指针
int//当前已分配的空间储存,以元素为单位
//-------基本操作的函数原型说明--------
Status visit(SqStack S);//对栈进行遍历
void Create_Stack(SqStack &S);//创建一个栈
Status InitStack(SqStack &S);//构造一个空栈S
Status DestroyStack(SqStack &S);//销毁栈S,S不再存在
Status ClearStack(SqStack &S);//把S置为空栈
Status StackEmpty(SqStack S);//若栈S为空栈,则返回TRUE,否则返回FALSE
int StackLength(SqStack S);//返回S的元素个数,即栈的长度
Status GetTop(SqStack S, SElemtype &e);
//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
Status Push(SqStack &S, SElemtype e);
//插入元素e为新的栈顶元素
Status Pop(SqStack &S, SElemtype &e);
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
Status StackTraverse(SqStack S, Status(*visit)(SqStack S));
//从栈底到栈顶依次对栈中每个元素调用函数visit()一旦visit()失败,则操作失败
void maze();//一个迷宫,求它从起点到终点的路径
上述操作的实现:
#include "stdafx.h"
Status InitStack(SqStack &S)//构造一个空栈S
S.base = (SElemtype *)malloc(STACK_INIT_SIZE*sizeof(SElemtype));
if (!S.base)exit(MYOVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
Status DestroyStack(SqStack &S)//销毁栈S,S不再存在
for (; S.top != S.base;){
SElemtype *temp = S.
delete S.base;
S.stacksize = 0;
return OK;
Status ClearStack(SqStack &S)//把S置为空栈
S.top = S.base;
return OK;
Status StackEmpty(SqStack S)//若栈S为空栈,则返回TRUE,否则返回FALSE
if (S.top == S.base)return TRUE;
else return FALSE;
int StackLength(SqStack S)//返回S的元素个数,即栈的长度
int length = 0;
for (; S.top != S.base; S.top--)length++;
Status GetTop(SqStack S, SElemtype &e)
//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
if (S.top != S.base){
e = *(S.top - 1);
return OK;
else return ERROR;
Status Push(SqStack &S, SElemtype e)
//插入元素e为新的栈顶元素
if (S.top - S.base &= S.stacksize){
S.base = (SElemtype *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(SElemtype));
if (!S.base)exit(MYOVERFLOW);
S.top = S.base + S.
S.stacksize += STACKINCREMENT;
*(S.top++) =
return OK;
Status Pop(SqStack &S, SElemtype &e)
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
if (S.top != S.base){
e = *(--S.top);
return OK;
else return ERROR;
Status visit(SqStack S)//对栈进行遍历1
if (S.base){
cout && "the data of the Stack is:";
for (; S.top != S.base;)
cout && S.top-&di && " " && S.top-&ord && " " && S.top-&seat.x && ',' && S.top-&seat.y &&S.top-&seat.flag&&
return OK;
else return ERROR;
Status StackTraverse(SqStack S, Status(*visit)(SqStack))
//从栈底到栈顶依次对栈中每个元素调用函数visit()一旦visit()失败,则操作失败
if (visit(S))return OK;
return ERROR;
void Create_Stack(SqStack &S)//创建一个栈
InitStack(S);
cout && "please input the length of the Stack:";
cout && "please input the data of the Stack:";
for (int i = 1; i &= i++){
cin && temp.di&&temp.ord&&temp.seat.x&&temp.seat.y&&temp.seat.
Push(S, temp);
void maze()//一个迷宫,求它从起点到终点的路径
PoseType map[8][8];
srand((int)time(0));
for (int i = 0; i &= 7; i++)//构造地图
for (int j = 0; j &= 7; j++)
map[i][j].flag = 2;
map[i][j].x =
map[i][j].y =
double ran = rand() / (RAND_MAX + 1.0);
if (ran&= 0.7)map[i][j].flag = 1;//在这个地图中,墙所占的比例为30%
cout && map[i][j].flag&& " ";
cout && endl && endl && endl &&
map[0][0].flag =0;//起点为地图的左上角
map[7][7].flag = 1;//终点为地图的右下角
int t = 1;//是迷宫路径上的第几块通道
InitStack(sq);//构造一个空的栈
first.di = 0;
first.ord =
first.seat = map[0][0];
Push(sq, first);//将起点放到栈中
SElemtype way,
Pop(sq,way);
switch (way.di)
case 0:if (way.seat.y & 7 && map[way.seat.x][way.seat.y+1].flag==1){//如果上个通道块的di为0,则地图向右扩展
nextstep.di = 0;//新的通道块的di=0;是第++t个通道块,通道块的flag标志为0,说明此通道块被扩展
nextstep.ord = ++t;
map[way.seat.x][way.seat.y + 1].flag = 0;
nextstep.seat = map[way.seat.x][way.seat.y+1];
way.di++;//上个通道块的di++,说明右边的通道块已经被扩展
Push(sq, way);
Push(sq, nextstep);//将上个通道块和新的通道块都压入栈中
if (nextstep.seat.x == 7 && nextstep.seat.y == 7)goto//如果是终点,则跳出循环
//如果向右不能扩展,则di++,并将上个通道块压入栈
way.di++; Push(sq, way); break;
case 1:if(way.seat.x & 7 && map[way.seat.x+1][way.seat.y].flag == 1){//同case 0,这是向下扩展
nextstep.di = 0;
nextstep.ord = ++t;
map[way.seat.x+1][way.seat.y].flag = 0;
nextstep.seat = map[way.seat.x+1][way.seat.y];
Push(sq, way);
Push(sq, nextstep);
if (nextstep.seat.x == 7 && nextstep.seat.y == 7)goto
Push(sq, way); break;
case 2:if (way.seat.y &0 && map[way.seat.x ][way.seat.y- 1].flag == 1){//同case 0,这是向左扩展
nextstep.di = 0;
nextstep.ord = ++t;
map[way.seat.x][way.seat.y - 1].flag = 0;
nextstep.seat = map[way.seat.x][way.seat.y - 1];
Push(sq, way);
Push(sq, nextstep);
if (nextstep.seat.x == 7 && nextstep.seat.y == 7)goto
Push(sq, way); break;
case 3:if (way.seat.x & 0 && map[way.seat.x-1 ][way.seat.y].flag == 1){//同case 0,这是向上扩展
nextstep.di = 0;
nextstep.ord = ++t;
map[way.seat.x-1][way.seat.y].flag = 0;
nextstep.seat = map[way.seat.x-1 ][way.seat.y];
Push(sq, way);
Push(sq, nextstep);
if (nextstep.seat.x == 7 && nextstep.seat.y == 7)goto
Push(sq, way); break;
//如果该通道块4个方向上已经被扩展完毕,则将这个通道块的flag设置为3,说明已经被扩展,但此路不通
map[way.seat.x][way.seat.y].flag = 3;
} while (!StackEmpty(sq));//当栈为空时,说明没有通路,跳出循环
if (StackEmpty(sq)){ cout && "there is no way in the maze!"; exit(-1); }
for (int i = 0; i &= 7; i++)
for (int j = 0; j &= 7; j++)
cout && map[i][j].flag && " ";
// maze.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
运行结果:
上述实心笑脸表示墙,空心笑脸表示此路可行,最终形成的空白是从起点到终点的通路一道迷宫问题,求助!【c语言吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:549,922贴子:
一道迷宫问题,求助!收藏
/*大家帮我看看这个迷宫,怎么计算机自动搜索就不行呢。结果显示不出来,还有,人工搜索的时候,当你走出了迷宫,那句“恭喜你成功地走出了迷宫”也显示不出来,到底是怎么回事啊?*/
#include&&graphics.h&
#include&&string.h&
#include&&stdio.h&
#include&&stdlib.h&
#define&N&20
int&found=0;&&&&&/*&巡游成功标志,1代表已经成功,0代表尚未找到出口&*/
int&way[N*N][2],wayn=0;&/*&记录巡游路线,路线上地格子数目&*/
void&InitGraph(void);&/*&图形系统初始化&*/
void&GenerateMazeByRandom(int&(*row)[N]);&/*&随机地生成迷宫数据&*/
void&GenerateMazeFromFile(int&(*row)[N]);&&/*&从人工编辑的迷宫数据文件生成迷宫&*/
void&DisplayMaze(int&(*row)[N]);/*&显示迷宫&*/
void&ManualFindWay(int&(*row)[N]);&/*&人工搜索迷宫&*/
void&AutoFindWay(int&(*row)[N],int&i,int&j);&/*&计算机搜索迷宫&*/
/*void&DisplayResult(int&(*mazeMap)[N]);&/*&显示搜索迷宫的结果&*/&*/
void&Draw(int&x,int&y);
void&UnDraw(int&x,int&y);
void&DrawLine(int&x0,int&y0,int&x1,int&y1);
void&InitGraph(void)
{
&int&dr=DETECT,
®isterbgidriver(EG***GA_driver);
&initgraph(&dr,&gr,&&);
&}
void&main(void)
{
&&int&mazeMap[N][N];
&&char&gm,
&&printf(&随即生成迷宫请按r或R,从数据文件生成生成迷宫请按f或F\n&);
&&gm=getche();
&&printf(&\n人工搜索迷宫请按m或M,计算机自动走迷宫请按a或A\n&);
&&pm=getche();
&&InitGraph();
&&switch(gm)
&&{
&&case&'r':case&'R':GenerateMazeByRandom(mazeMap);/*&随机地生成迷宫&*/
&&case&'f':case&'F':GenerateMazeFromFile(mazeMap);/*&从文件数据生成迷宫&*/
&&default:printf(&\n错误!\n&);exit(0);
&&}
&&DisplayMaze(mazeMap);
&&switch(pm)
&&{
&&case&'m':case&'M':ManualFindWay(mazeMap);/*&人工搜索迷宫&*/
&&case&'a':case&'A':AutoFindWay(mazeMap,1,1);/*&计算机搜索迷宫&*/
&&default:printf(&\n错误!\n&);exit(0);
&&}
&/*&DisplayResult(mazeMap);&*/
&&closegraph();
&&getch();
&&}
void&GenerateMazeByRandom(int&(*row)[N])
{
&&int&i,j;
&&&for(i=0;i&N;i++){*(row[0]+i)=1;*(row[N-1]+i)=1;*(row[i])=1;*(row[i]+N-1)=1;}
&&&for(i=1;i&N-1;i++)
&&&&for(j=1;j&N-1;j++)
&&*(row[i]+j)=random(2);
}
void&GenerateMazeFromFile(int&(*row)[N])
{
int&i,j;
FILE&*
if((fp=fopen(&mazeMap.txt&,&r&))==0){printf(&\n文件打开错误!\n&);exit(0);}
for(i=0;i&N;i++)
for(j=0;j&N;j++)
fscanf(fp,&%d&&,row[i]+j);
}
void&DisplayMaze(int&(*row)[N])
{
int&i,j;
char&str[100];
setbkcolor(0);
setfillstyle(SOLID_FILL,BLUE);
for(i=0;i&N;i++)
&for(j=0;j&N;j++)
&if(*(row[i]+j)==1)bar(20+1+j*20,40+1+i*20,420-1-19*20+j*20,440-1-19*20+i*20);
&sprintf(str,&方向键控制迷宫的走法\n&);
&setcolor(14);
&outtextxy(445,80,str);
&setfillstyle(SOLID_FILL,MAGENTA);
&&&&&&&&&&&&&&&&&&&&&&bar(500,100,536,136);
&bar(460,140,496,176);bar(500,140,536,176);bar(540,140,576,176);
&settextstyle(0,0,2);
&sprintf(str,&%c&,24);outtextxy(510,110,str);
&sprintf(str,&%c&,25);outtextxy(510,150,str);
&sprintf(str,&%c&,27);outtextxy(470,150,str);
&sprintf(str,&%c&,26);outtextxy(550,150,str);
&sprintf(str,&按Esc键退出游戏\n&);
&settextstyle(0,0,0);
&outtextxy(450,190,str);
}
void&ManualFindWay(int&(*mazeMap)[N])
{
int&row,col,
row=1;col=1;
Draw(row,col);
do
{
key=bioskey(0);
switch(key)
{
case&19200:if(mazeMap[row][col-1]!=1){Draw(row,col-1);UnDraw(row,col);DrawLine(row,col,row,col-1);col--;}
case&19712:if(mazeMap[row][col+1]!=1){Draw(row,col+1);UnDraw(row,col);DrawLine(row,col,row,col+1);col++;}
case&20480:if(mazeMap[row+1][col]!=1){Draw(row+1,col);UnDraw(row,col);DrawLine(row,col,row+1,col);row++;}
case&18432:if(mazeMap[row-1][col]!=1){Draw(row-1,col);UnDraw(row,col);DrawLine(row,col,row-1,col);row--;}
}if(row==N-2&&col==N-2){key=283;found=1;}
}while(key!=283);
if(found==1)printf(&恭喜你成功地走出了迷宫!\n&);
}
void&Draw(int&x,int&y)
{
setfillstyle(SOLID_FILL,RED);
bar(20+5+y*20,40+5+x*20,420-5-19*20+y*20,440-5-19*20+x*20);
}
void&UnDraw(int&x,int&y)
{
setfillstyle(SOLID_FILL,BLACK);
bar(20+1+y*20,40+1+x*20,420-1-19*20+y*20,440-1-19*20+x*20);
}
void&DrawLine(int&x0,int&y0,int&x1,int&y1)
{
setcolor(YELLOW);
line(20+10+y0*20,40+10+x0*20,420-10-19*20+y1*20,440-10-19*20+x1*20);
}
void&AutoFindWay(int&(*mazeMap)[N],int&i,int&j)
{
if(i==N-2&&j==N-2){found=1;}
*(mazeMap[i]+j)=1;
if(*(mazeMap[i]+j-1)==0&&found==0)
{AutoFindWay(mazeMap,i,j-1);
&if(found==1){way[wayn][0]=i,way[wayn][1]=j;wayn++;}}
if(*(mazeMap[i]+j+1)==0&&found==0)
{AutoFindWay(mazeMap,i,j+1);
&if(found==1){way[wayn][0]=i,way[wayn][1]=j;wayn++;}}
&if(*(mazeMap[i-1]+j)==0&&found==0)
{AutoFindWay(mazeMap,i-1,j);
&if(found==1){way[wayn][0]=i,way[wayn][1]=j;wayn++;}}
&if(*(mazeMap[i+1]+j)==0&&found==0)
{AutoFindWay(mazeMap,i+1,j);
&if(found==1){way[wayn][0]=i,way[wayn][1]=j;wayn++;}}
}
/*void&DisplayResult(int&(*mazeMap)[N])
{
&int&i;
&for(i=0;i&i++)
&{
&Draw(way[i][0],way[i][1]);
&UnDraw(way[i-1][0],way[i-1][1]);
&DrawLine(way[i-1][0],way[i-1][1],way[i][0],way[i][1]);
&}
}&*/
来伊份网上商城 史上超优惠 !!
快试试吧,可以对自己使用挽尊卡咯~◆◆
#include&stdio.h&
#include&stdlib.h&
#include&malloc.h&
typedef&struct{
&int&r,c;&//迷宫中r行c列的位置&
&}PosT
typedef&struct&MazeType{&
&int&m,n;
&char&arr[25][25];&//各位置取值'','#','@','*'&其中#障碍,@足迹,*路过,空格未走&
&}MazeT
typedef&struct{
&int&&//&当前位置在路经上的&序号&&
&PosType&&//当前的坐标位置&
&int&&//往下一座标的方向&
&}ElemT&//栈的元素类型&
typedef&struct&NodeType{
&ElemType&
&struct&NodeType&*
&}NodeType,*LinkT//结点类型,指针类型&
typedef&struct{
&LinkType&
&int&
&}S&//栈类型&
void&InitStack(Stack&*S)
{
&S-&top=NULL;
&S-&size=0;
}
int&StackEmpty(Stack&S)
{
&if(S.top==NULL||S.size==0)
&return&1;
&else
&return&0;
}
int&Push(Stack&*S,ElemType&e)
{
&LinkType&p;
&p=(LinkType)malloc(sizeof(NodeType));
&p-&data=e;
&if(S-&top==NULL)&
&p-&next=NULL;&
&else&
&p-&next=S-&&
&S-&top=p;
&(S-&size)++;
&return&1;
}
int&Pop(Stack&*S,ElemType&*e)
{
&LinkType&p;
&if(StackEmpty(*S))&
&return&0;
&*e=(S-&top)-&//--------------------------
&p=S-&
&S-&top=(S-&top)-&
&free(p);
&(S-&size)--;
&return&1;
}
void&InitMaze(MazeType&*ma,int&a[25][25],int&row,int&col)
{
&int&i,j;
&ma-&m=
&ma-&n=
&for(i=1;i&=i++)
&for(j=1;j&=j++)
&{
&if(a[i][j]!=0)
&ma-&arr[i][j]='#';
&else
&ma-&arr[i][j]='&';
&}
&printf(&迷宫建立完毕.\n&);&
}
int&Pass(MazeType&*ma,PosType&curpos)
{&
&if(ma-&arr[curpos.r][curpos.c]=='&')
&return&1;
&else
&return&0;&
}
int&FootPrint(MazeType&*ma,PosType&curpos)
{
&ma-&arr[curpos.r][curpos.c]='*';
}
int&Same(PosType&curpos,PosType&end)
{
&if(curpos.r==end.r&&curpos.c==end.c)
&return&1;
&else&
&return&0;
}
PosType&NextPos(PosType&curpos,int&di)
{
&switch(di)
快试试吧,可以对自己使用挽尊卡咯~◆◆
&{
&case&1:curpos.c++;
&case&2:curpos.r++;
&case&3:curpos.c--;
&case&4:curpos.r--;
&}
&return&
}
void&MarkPrint(MazeType&*ma,PosType&seat)
{
&ma-&arr[seat.r][seat.c]='@';
}
ElemType&MakeE(int&curstep,PosType&curpos,int&di)
{
&ElemType&
&temp.step=
&temp.seat.r=curpos.r;
&temp.seat.c=curpos.c;
&temp.di=
&return&
}
int&MazePath(MazeType&*maze,PosType&start,PosType&end)
{
&ElemType&e;
&PosType&curpos=
&InitStack(&S);&
&int&curstep,
&curstep=1;
&found=0;
&do{
&if(Pass(maze,curpos))
&{
&FootPrint(maze,curpos);
&e=MakeE(curstep,curpos,1);
&Push(&S,e);//加入路径&
&if(Same(curpos,end))&
&found=1;
&else
&{
&curpos=NextPos(curpos,e.di);
&curstep++;
&}&//else
&}//if
&else
&if(!StackEmpty(S))
&{
&Pop(&S,&e);
&while(e.di==4&&!StackEmpty(S))
&{
&MarkPrint(maze,e.seat);
&Pop(&S,&e);
&curstep--;
&}//while
&if(e.di&4)
&{
&e.di++;
&Push(&S,e);
&curpos=NextPos(e.seat,e.di);
&}//if
&}//if
&}while(!StackEmpty(S)&&!found);
&return&
}//MazePath
void&PrintMaze(MazeType&*maze)
{
&int&i,j;
&printf(&求解路径后输出的迷宫:\n&);
&for(i=1;i&=maze-&m;i++)
&{
&printf(&\n&);
&for(j=1;j&=maze-&n;j++)
&printf(&%c&&,maze-&arr[i][j]);
&}
}
void&Initialization()
{
&//在屏幕上方显示操作命令提示框
&printf(&***********************************************\n&);
&printf(&*CreatMaze--c&MazePath--m&PrintMaze--p&Quit--q*\n&);&
&printf(&***********************************************\n&);
&//在屏幕下方显示操作命令提示框&
&printf(&***********************************************\n&);
&printf(&&Enter&a&operation&code:&c,&m&,&p&,&OR&q*\n&);&
&printf(&***********************************************\n&);
}//Initlization
void&ReadCommand()
{
&//读入操作命令符,显示键入操作命令符的提示信息
&cmd=getchar();
}
void&Interpret(char&cmd)
{
&//解释执行操作命令
&FILE&*
&PosType&from,
&int&i,j,rnum,cnum,a2[25][25];
&char&filename[15];
&switch(cmd){
&case&'c':
&case&'C':&printf(&输入迷宫数据的文件名filename:&);
&scanf(&%s&,filename);
&if((fp=fopen(&filename&,&w&))==NULL)
&{
&printf(&不能打开文件\n&);
&exit(0);
&}
&printf(&输入行数,列数及各组数据:\n&);
&scanf(&%d%d&,&rnum,&cnum);
&for(i=1;i&=i++)
&for(j=1;j&=j++)
&scanf(&%d&,&a2[i][j]);
&fwrite(&ma,sizeof(struct&MazeType),1,fp);
&fclose(fp);&
&InitMaze(&ma,a2,rnum,cnum);//创建迷宫
&&
&case&'m':
&case&'M':&printf(&请输入迷宫入口位置及出口位置\n&);
&printf(&入口位置:&);
&scanf(&%d%d&,&from.r,&from.c);
&printf(&出口位置:&);
&scanf(&%d%d&,&term.r,&term.c);
&if(MazePath(&ma,from,term))//存在路径&
&printf(&请查看迷宫:\n&);
&else
&printf(&此迷宫从入口到出口没有路径.\n&);
&
&case&'p':
&case&'P':&PrintMaze(&ma);//将标记路径信息的迷宫输出到终端&
&
&}//switch
}//Interpret
main()
{
&Initialization();
&do{
&ReadCommand();
&Interpret(cmd);
&}while(cmd!='q'&&cmd!='Q');
&return&0;
&system(&pause&);
}
快试试吧,可以对自己使用挽尊卡咯~◆◆
f:\程序\12.cpp(1)&:&fatal&error&C1083:&Cannot&open&include&file:&'graphics.h':&No&such&file&or&directory
/*3、迷宫问题:设有一个nXm格的迷宫,四面封闭,仅在左上角的格子有入口,左下角的格子有出口。
迷宫内部的格子,其东、西、南、北四面可能有出入口,也可能没有出入口。设计一个程序通过迷宫:
例如:
{&{}
{}
{}
{}
{}
{}
{}
{}
{}&}
输出:路线
{&{}
{}
{}
{}
{}
{}
{}
{}
{}&}&&*/
#include&&stdio.h&
#define&n&9
#define&m&9
int&mi[n][m]={{1,0,0,0,0,1,1,1,0},{1,1,1,1,1,1,0,1,0},{1,0,0,0,0,0,0,1,0},{1,0,1,1,1,1,1,1,1},{1,1,0,1,0,0,0,0,1},{0,1,0,1,1,1,1,0,0},{0,1,0,0,1,0,1,1,1},{0,1,1,1,0,1,0,0,1},{0,0,0,1,1,1,0,0,1}};
int&c;
void&gong(int&a,int&b,int&c)&&&&&&&&&&/*迷宫回朔*/
&&&{mi[a][b]=2;&&&&/*将现在所在的位置数值由1变为2*/
&&&&if&((a==n-1)&&(b==m-1))&&/*判断是否找到终点*/
&&&&&&{c=1;&&&&&/*标记已经找到终点*/
&&&&&&&for&(a=0;a&=n-1;a++)
&{for&(b=0;b&=m-1;b++)
&&&&printf(&%d&,mi[a][b]);
&&printf(&\n&);
b=0;
&&&&&&&}
&&&&&&if&((mi[a+1][b]==1)&&(c==0)&&(a&=n))&gong(a+1,b,c);&/*向右*/
&&&&&&if&((mi[a][b+1]==1)&&(c==0)&&(b&=m))&gong(a,b+1,c);&/*向下*/
&&&&&&if&((mi[a-1][b]==1)&&(c==0)&&(a&=0))&gong(a-1,b,c);&/*向左*/
&&&&&&if&((mi[a][b-1]==1)&&(c==0)&&(b&=0))&gong(a,b-1,c);&/*向上*/
&&&&&&mi[a][b]=1;&/*回朔算法的后悔功能将2变回1*/
&&&&}
void&main()
&&&{gong(0,0,0);
&&&&}
哇塞,高手&看不懂
快试试吧,可以对自己使用挽尊卡咯~◆◆
厉害啊&5楼的算法很不错&虽然没有写前路走不通的情况,但却隐含的由递归包含其中,算法很巧妙
登录百度帐号推荐应用

参考资料

 

随机推荐