首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

求寻径算法解决方案

2012-02-13 
求寻径算法哪位朋友有寻径的算法啊能不能发给小弟看下初来的新手解决迷宫问题[解决办法]到nokia的网站上下

求寻径算法
哪位朋友有寻径的算法啊

能不能发给小弟看下

初来的新手  

解决迷宫问题

[解决办法]
到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;
}


热点排行