69,368
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<string.h>
#define MAX 1000
typedef struct node N;
struct node
{
int No;
char cName;
};
void sPath(int m,int n)
{
int i,j,temp,u;
int flag[10],dis[100];
int path[8][8]={{0,3,1,4,1,5,9,2},
{3,0,6,5,3,5,8,9},
{1,6,0,7,9,3,2,3},
{4,5,7,0,8,4,6,2},
{1,3,9,8,0,6,4,3},
{5,5,3,4,6,0,3,8},
{9,8,2,6,4,3,0,3},
{2,9,3,2,3,8,3,0}};
for(i=0;i<8;i++)
{
dis[i]=path[m][i];
flag[i]=0;
}
dis[m]=0;
flag[m]=1;
for(i=0;i<8;i++)
{
temp=MAX;
u=m;
for(j=0;j<8;j++)
{
if(!flag[j]&&(dis[j]<temp))
{
u=j;
temp=dis[j];
}
flag[u]=1;
for(j=0;j<8;j++)
{
if(!flag[j])
{
if(dis[j]>=dis[u]+path[u][j])
dis[j]=dis[u]+path[u][j];
else
continue;
}
}
}
}
printf("the shortest distance: %d\n",dis[n]);
}
int main(void)
{
int i,j,m,n;
char x,y;
N nodeinfo[8]={{0,'a'},{1,'b'},{2,'c'},{3,'d'},{4,'e'},{5,'f'},{6,'g'},{7,'h'}};
printf("search for the shortest distance between two areas:");
scanf("%c%c",&x,&y);
for(i=0;i<8;i++)
if(!strcmp(&x,&nodeinfo[i].cName))
{
m=nodeinfo[i].No;
break;
}
for(j=0;j<8;j++)
if(!strcmp(&y,&nodeinfo[j].cName))
{
n=nodeinfo[j].No;
break;
}
sPath(m,n);
}