九度oj 最短路徑問題

2022-06-23 14:21:12 字數 1068 閱讀 5710

題目描述:

給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。

輸入:輸入n,m,點的編號是1~n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為d,花費為p。最後一行是兩個數 s,t;起點s,終點t。n和m為0時輸入結束。

(1輸出:

輸出 一行有兩個數, 最短距離及其花費。

樣例輸入:

3 2

1 2 5 6

2 3 4 5

1 30 0

樣例輸出:

9 11
題目分析:

題目本身不難,編寫時細心一點!

主要學習一下圖的鄰接連結串列表示。

有幾點需要注意:由於圖是無向的,所以在用連結串列儲存的時候記得把b也push進去

# include# includeusing namespace std;

# define n 10001

struct edge

;int main()

while(m--)

int s,t;

scanf("%d%d",&s,&t);

//初始化

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

mark[s]=true;

dis[s]=0;

int newp=s;

for(i=1;idis[newp]+le||(dis[t]==dis[newp]+le&&mincost[t]>mincost[newp]+co))

}//尋找下一個要遍歷的點,全域性搜尋

int min=10000000;

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

}mark[newp]=true;

} printf("%d %d\n",dis[t],mincost[t]); }

return 0;

}