题目链接:
注意事项:
1.初始数组长度为零
2.同样路径可能花费不同的时间
3.运用变形的Dijkstra算法
代码思路:
先初始化二维数组e和cot再输入数据并更新二维数组e和最大的cot,接着输入能到达的点fly并把e[fly][0]和e[0][fly]初始化为0,最后输入想要到达的f,然后运用Dijkstra算法得出到达各点的最短路数组,最后找出最短路数组的最小值ans。
代码如下:
1 #include2 #include 3 #include 4 #include 5 #define inf 1<<30 6 using namespace std; 7 8 int e[1205][1205]; 9 int a,b,t,n,m,l,cot,ans,fly[1205],f[1205],book[1205],dis[1205];10 int dsj()11 {12 int u,pos;13 memset(book,0,sizeof(book));14 book[0]=1;15 for(int i=0;i<=cot;i++)16 dis[i]=e[i][0];17 for(int i=1;i<=cot;i++)18 {19 pos=inf;20 for(int j=1;j<=cot;j++)21 {22 if(dis[j] dis[u]+e[u][v])31 dis[v]=dis[u]+e[u][v]; 32 }33 }34 return 0;35 }36 int main()37 {38 while(~scanf("%d%d%d",&n,&m,&l))39 {40 cot=0;41 for(int i=0;i<1111;i++)42 {43 for(int j=0;j<1111;j++)44 e[i][j]=inf;45 e[i][i]=0;46 }47 for(int i=0;i b?a:b;54 }55 for(int i=0;i dis[f[i]])66 ans=dis[f[i]];67 if(ans==inf)68 printf("NO\n");69 else70 printf("%d\n",ans);71 }72 return 0;73 }