沒什麼太大的感覺,只是覺得進步是乙個過於緩慢的感覺……
dijkstra演算法的應用,注意可重邊的處理以及同等權值的路徑時,路徑的選擇
#include #define maxn 1010view code#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;
}
杭電 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 輸入包括多組資料。每組資料第一行是兩個整...