杭電 3790 最短路徑問題

2022-03-20 22:13:05 字數 1422 閱讀 7148

沒什麼太大的感覺,只是覺得進步是乙個過於緩慢的感覺……

dijkstra演算法的應用,注意可重邊的處理以及同等權值的路徑時,路徑的選擇

#include #define maxn 1010

#define inf 1000000000

intmat[maxn][maxn];

intbb[maxn][maxn];

intmin[maxn];

intpre[maxn];

int com(int m, int s, int a, int

b)

while( b !=s )

for( p = 0; p < (i-1); p++)

sum1 += bb[path1[p]][path1[p+1

]];

for( p = 0; p < (j-1); p++)

sum2 += bb[path2[p]][path2[p+1

]];

if( sum1 >=sum2 )

return path2[1

];

return path1[1];}

void dijkstra(int n,int

s)

else

if( !v[i] && (mat[k][i] != inf) && (mat[k][i] + min[k] ==min[i]) )

pre[i] =com(i,s,pre[i],k);

}}int

main()

for( k = 0; k < m; k++)

else

if( (a == mat[i][j])&&(b

bb[i][j] = bb[j][i] =b;

}/*for( i = 1; i <= n; i++ )

*/scanf(

"%d%d

", &s, &t);

//printf("%d %d\n",s,t);

dijkstra(n,s);

/*for( i = 1; i <= n; i++ )

printf( "%d ", min[i] );

printf( "\n" );

for( i = 1; i <= n; i++ )

printf( "%d ", pre[i] );

printf( "\n" );

*///

printf("123");

sum = 0

; end =t;

while( end !=s )

//printf("123");

printf("

%d %d\n

",min[t],sum);

}return0;

}

view code

杭電 3790 最短路徑問題

雙權最短路 需要同時考慮兩個權值 這裡是優先長度,長度相同的情況下優先花費較少的邊 有點麻煩的是 之前用的寫法的邏輯似乎出了點問題 在更新邊長時的判斷不夠嚴謹 好在最後發現了 還有這種型別的題 一般都需要考慮重邊問題 用的dijkstra include int e 1200 1200 q 1200...

3790 最短路徑問題

問題 problem description 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。input 輸入n,m,點的編號是1 n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,...

杭電2544 最短路徑

problem description 在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整...