//#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
|