当前位置: 代码迷 >> J2ME >> 求寻径算法解决方案
  详细解决方案

求寻径算法解决方案

热度:4854   发布时间:2013-02-25 21:35:48.0
求寻径算法
哪位朋友有寻径的算法啊

能不能发给小弟看下

初来的新手  

解决迷宫问题

------解决方案--------------------------------------------------------
到nokia的网站上下载一个S40_SDK_3rd_Edition,examples\m3g文件夹下就是一个迷宫的游戏,有源代码。
------解决方案--------------------------------------------------------
UP
------解决方案--------------------------------------------------------
#include "stdio.h "
#include "stdlib.h "

typedef struct
{
int *base;
int *top;
int stacksize;
}sqstack;

int InitStack( sqstack *s) //创建栈
{
s-> base = (int*)malloc(100*sizeof(int));
if(!s-> base) return 0;
s-> top = s-> base;
s-> stacksize=100;
return 1;
}

int push(sqstack *s, int e) // 压栈
{
if(s-> top-s-> base > = s-> stacksize)
{
s-> base = (int*)realloc(s-> base,
(s-> stacksize+10)*sizeof(int));// 栈满 开辟新空间
if(!s-> base) return 0;
s-> top = s-> base + s-> stacksize;
s-> stacksize = s-> stacksize + 10;
}
*(s-> top)=e;
s-> top=s-> top+4;
return 1;
}


int gettop(sqstack *s) // 取栈顶元素
{
int e;
if(s-> top==s-> base)
return 0;
e = *(s-> top-4);
return e;
}


int pop(sqstack *s) // 出栈
{
if(s-> top == s-> base) return 0;
s-> top=s-> top-4;
return 1;
}

int main()
{
sqstack *s = (sqstack*)malloc(sizeof(sqstack));
if( !InitStack(s) )
return 0;
int up,down,left,right, // 上下左右走
nowpos, // 当前位置
rows,cols, // 行数 列数
rownum,colnum, // 行号 列号
find=0; // 判断是否找到出口

nowpos = 1;
cols = 4;
rows = 4;

int record[4*4]; // 记录走过路径和地图信息
int map[4*4] = {0,2,0,0, // 地图信息
1,1,1,0,
1,0,0,0,
1,1,3,0};


for(int i=0;i <rows*cols;i++)
record[i]=map[i];

while(!find)
{
up = nowpos - cols;
down = nowpos + cols;
left = nowpos - 1;
right = nowpos + 1;

rownum = nowpos/cols;
colnum = nowpos%cols;

if( up> =0 && record[up] )
{
push(s,up);
record[up]=0;
record[nowpos]=0;
nowpos=up;
if(map[nowpos]==3)
find=1;
}

else if( down <=rows*cols-1 && record[down] )
{
push(s,down);
record[down]=0;
record[nowpos]=0;
nowpos=down;
if(map[nowpos]==3)
find=1;
}

else if( left> =rownum*cols && record[left] )
{
push(s,left);
record[left]=0;
record[nowpos]=0;
nowpos=left;
if(map[nowpos]==3)
find=1;
}

else if( right <=(rownum+1)*cols-1 && record[right] )
{
push(s,right);
record[right]=0;
record[nowpos]=0;
nowpos=right;
if(map[nowpos]==3)
find=1;
}

else
{
if(map[nowpos]==2 || s-> top==s-> base)
{
printf( "NO WAY OUT ");
exit(-1);
}
else
{
pop(s);
nowpos = gettop(s);
}
}
} // end while

int k ;
while (s-> top!=s-> base)
{
k = gettop(s);
pop(s);
printf( "%d ",k);
printf( " <- ");
}
printf( "1 ");
return 1;
}


  相关解决方案