资源描述:
《c语言实现迷宫最优路径选择》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、中国计量学院实验报告实验课程:算法与数据结构实验名称:迷宫的最优路径班级:学号:姓名:实验日期:2013-5-20一.实验题目:输入一迷宫查找并输出迷宫的最优路径实验成绩:指导教师:一.算法说明1.定义一个结构体来表示起点和末点的坐标,定义一个数组来存放迷宫.structelem{intx;//行inty;//列};//定义结构体intM[10][10];2.给数组中空白处赋上从起点到该处步骤的值.intfind(intn){for(i=0;i<9;i++)for(j=0;j<10;j++){if(M[i][j]==n){{if(M[i][j+1]
2、==0)M[i][j+1]=n+1;elseif(M[i][j+1]>n+1)M[i][j+1]=n+1;}{if(M[i+1][j]==0)M[i+1][j]=n+1;elseif(M[i+1][j]>n+1)M[i+1][j]=n+1;}{if(M[i][j-1]==0)M[i][j-1]=n+1;elseif(M[i][j-1]>n+1)M[i][j-1]=n+1;}{if(M[i-1][j]==0)M[i-1][j]=n+1;elseif(M[i-1][j]>n+1)M[i-1][j]=n+1;}}}}3.给最优路径附上特定的值,方便最后的
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;}elseif(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;}}一.测试结果二.分析与探讨程序结果
4、正确,但是没有涉及到栈内容,使用栈可以对程序进一步改进。三.附录:源代码中国计量学院实验报告#include#includestructelem{intx;//行inty;//列intdi;//方向,di=1代表右,di=2代表下,di=3代表左,di=4代表上};//定义结构体structeleme,q;intM[10][10]={{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},{-1,0,0,-1,0,0,0,-1,0,-1},{-1,0,0,-1,0,0,0,-1,0,-1},{-1,0,
5、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,-1},{-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}};intn=1,i,j;//从起点到某个位置的步骤intfind(intn){for(i=0;i<9;i++)for(j=0;j<10;j++){if(M[i][j]==n){{if(M
6、[i][j+1]==0)M[i][j+1]=n+1;elseif(M[i][j+1]>n+1)M[i][j+1]=n+1;}{if(M[i+1][j]==0)M[i+1][j]=n+1;elseif(M[i+1][j]>n+1)M[i+1][j]=n+1;}{if(M[i][j-1]==0)M[i][j-1]=n+1;elseif(M[i][j-1]>n+1)M[i][j-1]=n+1;}{if(M[i-1][j]==0)M[i-1][j]=n+1;elseif(M[i-1][j]>n+1)M[i-1][j]=n+1;}}}}intmain(voi
7、d){intk;/*printf("请输入迷宫:");for(i=0;i<10;i++)for(j=0;j<10;j++)scanf("%d",&M[i][j]);*/printf("迷宫为:");for(i=0;i<10;i++)//显示迷宫for(j=0;j<10;j++){if(M[i][j]==-1)printf("#");elseprintf("");if(j==9)printf("");}printf("请输入入口的横纵坐标:");scanf("%d%d",&e.x,&e.y);if(M[e.x][e.y]==-1){p
8、rintf("迷宫走不通");}M[e.x][e.y]=n;printf("请输入出口的横纵坐标:");scanf