PAT甲級1003,個人參考注釋

2021-10-21 21:41:54 字數 1111 閱讀 5268

#define _crt_secure_no_warnings

#include#includeusing namespace std;

int n;//城市的數目

int m;//道路的數量

int c1;//你現在所在的城市

int c2;//你必須去救的城市

int e[510][510];//記錄城市之間距離的二維表

int weight[510];

int dis[510];//dis[i]表示從出發點到i結點最短路徑的路徑長度

int num[510];//num[i]表示從出發點到i結點最短路徑的條數

int w[510];//w[i]表示從出發點到i點救援隊的數目之和

bool visit[510];//判斷是否已經訪問過

const int inf = 99999999;

int main()

fill(e[0], e[0] + 510 * 510, inf);//給未賦值的距離二維陣列初始化

fill(dis, dis + 510, inf); //給未賦值的距離一維陣列初始化

int a, b, c;

for (int i = 0; i < m; i++)//每個道路的資料都要輸入

dis[c1] = 0;//當前所在的城市距離為0

w[c1] = weight[c1];//目前所在救援隊數量

num[c1] = 1;//最短路徑條數為1

//開始迪傑斯特拉演算法

for (int i = 0; i < n; i++)//每個城市都要算到

}if (u == -1)

visit[u] = true;//標記為j結點訪問過了

for (int v = 0; v < n; v++)//統計一下總距離

else if (dis[u] + e[u][v] == dis[v])}}

} }printf("%d %d", num[c2], w[c2]);//輸出最短路徑條數和最短路徑上的救援小組數目之和,如果有多條就輸出城市救援小組數目最大的那個

return 0;

}

這個visit陣列指的到底是路還是城市?

PAT甲級1003題解 Dijkstra

解題步驟 1.初始化 設定mat存放點之間的距離,vis存放點的選取情況,people存放初始時每個城市的人數,man存放到達每個城市的救援隊的最多的人數,num存放到達每個城市的最多的人數 在最短路徑的基礎之上 dist存放從起點開始到達每個城市的最短的路徑 隨著每次選取點而更新 2.核心演算法 ...

浙大pat甲級 1024

可用3個vector來進行處理,先將輸入的數字都壓入到第1第2個vector中,從i 0到k迴圈判斷是否為對稱數,如果不是對稱數則將其與倒轉數相加,並將得到的每一位數加入到第三個vector的頭部,並將新的第三個vector重新賦值給第一第二,直到該數為對稱數或i k結束迴圈。ac include ...

浙大PAT甲級 1039

一開始想到用map 但是會超時。由於題目中的名字由三個字母和乙個數字組成,因此有26 26 26 10種,因此可以用hash來做。使用setmm max max 26 26 26 10 5 同時輸入名字時也應改為char s 5 scanf來輸入。ac include include include...