#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...