贪心算法求最短路径,输入不同地点名称,显示最短距离均为零,求代码纠错,谢谢!!!

kwi314 2017-10-03 10:31:57
#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);


}

...全文
177 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-10-05
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
kwi314 2017-10-04
  • 打赏
  • 举报
回复
求解答……

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧