这个是求迷宫的最短路径的代码~注意,当迷宫开口很大(像13楼那样)循环遍历次数就会超多,看上去貌似陷入(死循环)]~当然迷宫路径只有几条的时候求最优解是可以的~对比删了
if (n[x][y]=='o')
n[x][y]=' ';
和保留,step的值是会有不同的~
这个是求最短路径的代码~
程序代码:
if (n[x][y]=='o')
n[x][y]=' ';
和保留,step的值是会有不同的~
这个是求最短路径的代码~
程序代码:#include<stdio.h>//注意,迷宫节点不能太多,会影响执行效率
#include<stdlib.h>
#include<string.h>
#define N 11
int COUNT=-1;//计算起点和终点间的步数,如果不存在通向终点的路径,则保留初值-1
typedef struct Node
{
int x;
int y;
}Node;
Node run[N*N]={0};
Node run_2[N*N]={0};
void print(char K[][N])
{
int i=0;
for (i=0;i<N;i++)
printf("%s\n",&K[i][0]);
}
int go(char n [][N],Node run[],int x,int y,int step)
{
if (x<0||x>=N||y<0||y>=N)
return 0;
if (n[x][y]=='E'&&(COUNT==-1||step<COUNT))
{
int i=0;
COUNT=step;
for (i=0;i<COUNT;i++)
run_2[i]=run[i];
return 0;
}
else if (n[x][y]=='E')
return 0;
if (n[x][y]!=' ')
return 0;
n[x][y]='o';
run[step].x=x;
run[step].y=y;
if (go(n,run,x-1,y,step+1))
return 1;
if (go(n,run,x+1,y,step+1))
return 1;
if (go(n,run,x,y-1,step+1))
return 1;
if (go(n,run,x,y+1,step+1))
return 1;
if (n[x][y]=='o')
n[x][y]=' ';
return 0;
}
int main()
{
char K[N][N]=
{
{"**********"},
{"* S* *E*"},
{"* *** ** *"},
{"* * * * *"},
{"* *"},
{"*** * ** *"},
{"** * *"},
{"** ** ** *"},
{"* *"},
{"**********"},
};
int i=0;
int j=0;
int step=0;
for (i=0;i<N;i++)
{
for (j=0;j<N&&K[i][j]!='S';j++);
if (j<N)
break;
}
K[i][j]=' ';
go(K,run,i,j,step);
K[i][j]='S';
for (i=1;i<COUNT;i++)
K[run_2[i].x][run_2[i].y]='o';
for (i=0;i<N;i++)
printf("%s\n",&K[i][0]);
printf("The step(s) is: %d\n",COUNT);
printf("The Road is:\n");
for (i=0;i<COUNT;i++)
{
printf("[%d][%d] ",run_2[i].x,run_2[i].y);
if (i%10==9&&i!=COUNT-1)
printf("\n");
}
printf("\n");
return 0;
}
[此贴子已经被作者于2016-12-21 02:17编辑过]

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]










~~~
那个答案算法算不算是递归~~~~
)~