dijkstra对有障碍的地图如何建立邻接多重表?

[复制链接]
查看11 | 回复1 | 2010-7-14 15:11:50 | 显示全部楼层 |阅读模式
//#define NDEBUG
#include "stdio.h"
#include "conio.h"
#include "assert.h"
#include "stdlib.h"
#define TileNum(x,y) ((y)*MapWidth+(x)) //将 x,y 坐标转换为地图上块的编号
#define TileX(n) ((n)%MapWidth) //由块编号得出 x 坐标
#define TileY(n) ((n)/MapWidth) //由块编号得出 y 坐标
#define MapWidth 80//地图宽
#define MapHeight 25//地图高
char *Map,*MapBackup; //地图数据
int i,j,StartX,StartY,EndX,EndY; //起点、终点坐标
void ReadMap()//读入地图
{
FILE *f;
f=fopen("map.txt","r");
assert(f);
Map=(char *)malloc(MapWidth*MapHeight+1);
assert(Map);
for(i=0;i<MapHeight;i++)
{
fgets(Map+TileNum(0,i),MapWidth+1,f);
}
fclose(f);
StartX=-1;
EndX=-1;
for (i=0;i<MapHeight;i++)
{
for (j=0;j<MapWidth;j++)
{
if (Map[TileNum(j,i)]=='s')
{

Map[TileNum(j,i)]=' ';

StartX=j;

StartY=i;
}

if (Map[TileNum(j,i)]=='e')
{

Map[TileNum(j,i)]=' ';

EndX=j;

EndY=i;
}
}
}
}
void ShowMap()//显示地图
{

for (i=0;i<MapHeight;i++)
{
for (j=0;j<MapWidth;j++)
{
printf("%c",Map[TileNum(j,i)]);
}
}
}
int main(void)//主程序
{
ReadMap();
ShowMap();
getch();
return 0;
}
用以上程序把下面的地图读入Map数组后,地图的邻接矩阵应该如何建立?本人见识浅薄,只知道dijkstra建立的邻接矩阵中,2点间不能有障碍,如果有,那么2点间的权值就不能是直线距离长度了,我就不知道该如何考虑。请各位高手赐教!希望各位能给出好的算法!
地图如下
46,12
oooooooooooooooooooooooooooooooooooooooooooooo
o
o
o
o
o
o
o
ooooooooooooooo
o
oo
ooooooooooo
oo
o
o
ooooooo
ooooooooooooooo
o
oooooo
o
oooo
o

o
o
o
oooooooooooooooooooooooooooooooooooooooooooooo

回复

使用道具 举报

千问 | 2010-7-14 15:11:50 | 显示全部楼层
转载第一次进世博园,是从四号门。四号门直接对着亚洲区,首先映入眼帘的是日本馆。世博园最热门的场馆之一。两次进世博园,都没敢去排队,不愿在排队上花太多的时间。哈萨克斯坦馆 没进去,只拍了外观。其实进不去场馆,单纯从一些国家的自建馆,都是视觉盛宴。乌兹别克斯坦 排队的阵势有点吓人,这只是小意思,大概需要1个小时左右吧。对比其他的需要2--4个小时,甚至9个小时,太easy了。韩国馆 外墙,则为无数凹凸有致的韩文字母,场馆建设很有创意。尽管需要4个小时左右,只是看了看了边上的美食部分,韩国主推四大美食,可惜,当时因为技术和光线原因,没拍好。四个美食的名字也没记住。因为是在韩国餐厅的入口处,两个韩国女子穿
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行