c语言实现迷宫最优路径选择

c语言实现迷宫最优路径选择
c语言实现迷宫最优路径选择

中国计量学院实验报告

实验课程:算法与数据结构实验名称:迷宫的最优路径班级:学号:

姓名:实验日期:2013-5-20

实验题目:

输入一迷宫

查找并输出迷宫的最优路径

指导教师:

实验成绩:

1. 定义一个结构体来表示起点和末点的坐标, 定义一个数组来存放迷宫struct elem

{

int x;// 行

int y;// 列

}; // 定义结构体

int M[10][10];

2. 给数组中空白处赋上从起点到该处步骤的值.

int find(int n)

{

for(i=0;i<9;i++)

for(j=0;j<10;j++)

{

if(M[i][j]==n)

{

{if (M[i][j+1]==0) M[i][j+1]=n+1;

else if(M[i][j+1]>n+1) M[i][j+1]=n+1;}

{if (M[i+1][j]==0) M[i+1][j]=n+1;

else if(M[i+1][j]>n+1) M[i+1][j]=n+1;}

{if (M[i][j-1]==0) M[i][j-1]=n+1;

else if(M[i][j-1]>n+1) M[i][j-1]=n+1;}

{if (M[i-1][j]==0) M[i-1][j]=n+1;

else if(M[i-1][j]>n+1) M[i-1][j]=n+1;}

}

}

}

3. 给最优路径附上特定的值, 方便最后的输出.

for (;;)

{

if(M[q.x+1][q.y]==(n-1)) {q.x++;M[q.x][q.y]=0;}

else {if(M[q.x][q.y-1]==(n-1)) {q.y--;M[q.x][q.y]=0;}

else {if(M[q.x-1][q.y]==(n-1)) {q.x--;M[q.x][q.y]=0;}

else if(M[q.x][q.y+1]==(n-1)) {q.y++;M[q.x][q.y]=0;}}}

n--;

if(e.x==q.x&&e.y==q.y) {M[e.x][e.y]=0; break;}

}

四.分析与探讨

程序结果正确,但是没有涉及到栈内容,使用栈可以对程序进一步改进。

五.附录:源代码

#include {if (M[i-1][j]==0)

#include M[i-1][j]=n+1;

struct elem else if(M[i-1][j]>n+1)

{M[i-1][j]=n+1;}

int x;// 行}

int y;// 列}

int di;// 方向,di=1 代表右,di=2 代表}

下,di=3 代表左,di=4 代表上int main(void)

}; // 定义结构体{

struct elem e, q; int k;

int M[10][10]={

{-1,-1,-1,-1,-1,-1,-1,-1,-1,- 1}, /* printf(" 请输入迷宫:\n");

{-1, 0, 0,-1, 0, 0, 0,-1, 0,-1}, for(i=0;i<10;i++)

{-1, 0, 0,-1, 0, 0, 0,-1, 0,-1}, for (j=0;j<10;j++)

{-1, 0, 0, 0, 0,-1,-1, 0, 0,-1}, scanf("%d",&M[i][j]);*/

{-1, 0,-1,-1,-1, 0, 0, 0, 0,-1},

{-1, 0, 0, 0,-1, 0, 0, 0, 0,-1}, printf(" 迷宫为:\n");

{-1, 0,-1, 0, 0, 0,-1, 0, 0,-1}, for (i=0;i<10;i++) // 显示迷宫

{-1, 0,-1,-1,-1, 0,-1,-1, 0,-1}, for (j=0;j<10;j++){

{-1,-1, 0, 0, 0, 0, 0, 0, 0,-1}, if(M[i][j]==-1) printf(" #");

{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}}; else printf(" ");

int n=1,i,j;// 从起点到某个位置的步骤if(j==9) printf("\n");}

int find(int n)

{printf(" 请输入入口的横纵坐标:\n");

for(i=0;i<9;i++) scanf("%d %d",&e.x,&e.y);

for(j=0;j<10;j++) if(M[e.x][e.y]==-1){printf(" 迷宫走不通

{\n");}

if(M[i][j]==n) M[e.x][e.y]=n;

{printf(" 请输入出口的横纵坐标:\n");

{if (M[i][j+1]==0) scanf("%d %d",&q.x,&q.y);

M[i][j+1]=n+1; if(M[q.x][q.y]==-1){printf(" 迷宫走不通

else if(M[i][j+1]>n+1) \n") ;}

M[i][j+1]=n+1;} for(k=0;k<20;k++)

{find(n);

{if (M[i+1][j]==0) n++;}

M[i+1][j]=n+1; n=M[q.x][q.y];

else if(M[i+1][j]>n+1) M[q.x][q.y]=0;

M[i+1][j]=n+1;}

for (;;)

{if (M[i][j-1]==0) {

M[i][j-1]=n+1; if(M[q.x+1][q.y]==(n-1))

else if(M[i][j-1]>n+1) {q.x++;M[q.x][q.y]=0;}

M[i][j-1]=n+1;} else {if(M[q.x][q.y-1]= =(n-1))

{q.y--;M[q.x][q.y]=0;}

中国计量学院实验报告

else {if(M[q.x-1][q.y]==(n-1))

{q.x--;M【q.x]【q.y]=O;}

else

if(M[q.x][q.y+1]==(n-1))

{q.y++;M【q.x]【q.y]=O;}}}

n--;

if(e.x==q.x&&e.y==q.y) {M[e.x][e.y]=O;

break;}

}

printf(”最优路径为:\n");

for (i=0;i<10;i++) // 显示迷宫和路径,其中#

代表墙,0代表路径,空白处代表可行。

for (j=0;j<10;j++){

if(M[i][j]==-1) printf(" #"); else

if(M[i][j]==0) printf("

0");

else printf("");

if(j==9) printf("\n");}

}

1

相关主题
相关文档
最新文档