c语言迷宫最短路径
2014-02-11 11:30
393 查看
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define M 8
#define N 7
///////////////////
int Print();
int Findwork();
int S
[M]={
{1,1,1,1,1,1,1,1},
{1,0,0,0,1,0,0,1},
{1,0,0,1,0,0,0,1},
{1,1,0,0,0,0,0,1},
{1,0,0,1,1,0,0,1},
{1,0,0,0,0,1,0,1},
{1,1,1,1,1,1,1,1},
};
struct road
{
int x,y,d;
}lj[100],temp[100];
int num=0;
//////////////////////////////////////////////
int main()
{
Print();
Findwork();
Print();
return 0;
}
int Findwork()
{
int top=0;
int x;
int y;
int d = -1;
int find = 0;//d为设置方向,上下左右。find为设置找不找得到路
int min=10000;
int s_x,s_y;
printf("请输入起点:X X\n");
scanf("%d %d",&s_x,&s_y);
int e_x,e_y;
printf("请输入终点:X X\n");
scanf("%d %d",&e_x,&e_y);
lj[top].x=s_x;
lj[top].y=s_y;
S[s_x][s_y] = -1;
while(top>-1)
{
if(lj[top].x==e_x && lj[top].y==e_y)
{
if(min > top)
{
min = top;
for(num=0;num<=top;num++)
{
temp[num].d=lj[num].d;
temp[num].x=lj[num].x;
temp[num].y=lj[num].y;
}
}
}
while(d < 4 && find == 0)
{
d++;
switch(d)
{
case 0://方向为上
x=lj[top].x-1;
y=lj[top].y;
break;
case 1://方向为右
x=lj[top].x;
y=lj[top].y+1;
break;
case 2://方向为下
x=lj[top].x+1;
y=lj[top].y;
break;
case 3://方向为左
x=lj[top].x;
y=lj[top].y-1;
}
if(S[x][y] == 0)
{
find = 1;
}
}
if(find == 1)//判断是否找得到,1为找得到
{
lj[top].d = d;
top++;
lj[top].x = x;
lj[top].y = y;
d = -1;
find = 0; //重新调整方向
S[x][y] = -1;
}
else //找不到的话退栈
{
S[lj[top].x][lj[top].y] = 0;
top--;
d = lj[top].d;
}
}
return 0;
}
int Print()
{
int i,j;
if(0 != num)
{
for(i=0;i<num;i++)
{
S[temp[i].x][temp[i].y] = 3;
}
}
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
if(S[i][j] == 0)
printf("□");
if(S[i][j] == 1)
printf("■");
if(S[i][j] == 3)
printf("⊙");
}
printf("\n");
}
return 0;
}
相关文章推荐
- c语言,迷宫最短路径
- 迷宫的最短路径
- Dijkstra单源最短路径,适合稠密图,顶点少,边多(c语言)
- 用并查集(find-union)实现迷宫算法以及最短路径求解
- 迷宫最短路径问题-BFS
- 用栈寻找迷宫的最短路径
- 迷宫的最短路径
- 迪杰斯特拉最短路径算法C语言简单实现
- 迷宫最短路径(bfs)
- 广度优先搜索--迷宫最短路径--队列
- 迷宫的最短路径(局限版)
- 单发点赋权最短路径C语言
- A*算法--迷宫找最短路径(JAVA实现)
- 迷宫的最短路径
- bfs走迷宫记录最短路径(求大神指…
- 迷宫最短路径
- 2014-12-13迷宫的最短路径
- 迷宫的最短路径-BFS算法
- 回溯法找迷宫最短路径
- 《挑战程序设计比赛》 P35 题目:迷宫的最短路径 广度搜索