UOJ 275 最短路徑問題

2022-05-23 09:57:06 字數 1276 閱讀 8597

【題目描述】:

平面上有n個點,每個點的座標均在-10000~10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點間的直線距離。現在的任務是找出從一點到另一點之間的最短路徑。

【輸入描述】:

輸入檔案共n+m+3行,其中:第一行為整數n。

第2行到第n+1行(共n行) ,每行兩個整數x和y,描述了乙個點的座標。

第n+2行為乙個整數m,表示圖中連線的個數。

此後的m 行,每行描述一條連線,由兩個整數i和j組成,表示第i個點和第j個點之間有連線。

最後一行:兩個整數s和t,分別表示源點和目標點

【輸出描述】:

輸出檔案僅一行,乙個實數(保留5位小數),表示從s到t的最短路徑長度。

【樣例輸入】:

50 0

2 02 2

0 23 1

5 1 2

1 3

1 4

2 5

3 5

1 5【樣例輸出】:

3.41421

【時間限制、資料範圍及描述】:

n<=100

本題可以用兩點間距離公式dis=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))算出兩點間邊的路徑長,然後再跑最短路即可

code:

#include#include#include#include#include#include#include#includeusing namespace std;

const int m=1000005;

const int inf=1<<30;

int n,m,s,t;

int dist[m],cost[m],cnt;

struct nodeedge[m];

bool operator <(node p,node q)

dist[s]=0;

cost[s]=0;

q.push((node));

while (!q.empty()));}}

return;

}int main()

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

memset(dist,0,sizeof(dist));

memset(cost,0,sizeof(cost));

dijkstra();

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

} return 0;

}

275 最短路徑問題

275.最短路徑問題 描述 提交自定義測試 題目描述 平面上有n個點,每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點間的直線距離。現在的任務是找出從一點到另一點之間的最短路徑。輸入描述 輸入檔案共n m ...

275 最短路徑問題 Floyd

平面上有n個點,每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點間的直線距離。現在的任務是找出從一點到另一點之間的最短路徑。輸入檔案共n m 3行,其中 第一行為整數n。第2行到第n 1行 共n行 每行兩個...

275 水題 最短路徑問題

最短路徑問題 非常水的一道題啦,但是對於相隔九個月重新出山第一天的我非常不友好,各種小錯誤容易犯啊!一遍floyd加上簡單的座標求距離公式。幾乎是模板題 題目 平面上有n個點,每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路...