光明小學的小朋友們要舉行一年一度的接力跑大賽了,但是小朋友們卻遇到了乙個難題:設計接力跑大賽的線路,你能幫助他們完成這項工作麼?
光明小學可以抽象成一張有n個節點的圖,每兩點間都有一條道路相連。光明小學的每個班都有m個學生,所以你要為他們設計出一條恰好經過m條邊的路徑。
光明小學的小朋友們希望全盤考慮所有的因素,所以你需要把任意兩點間經過m條邊的最短路徑的距離輸出出來以供參考。*
你需要設計這樣乙個函式:
res solve( n, m, map);
注意:map必然是n * n的二維陣列,且map[i][j] == map[j][i],map[i][i] == 0,-1e8 <= map[i][j] <= 1e8。(道路全部是無向邊,無自環)2 <= n <= 100, 2 <= m <= 1e6。要求時間複雜度控制在o(n^3*log(m))。
map陣列表示了一張稠密圖,其中任意兩個不同節點i,j間都有一條邊,邊的長度為map[i][j]。n表示其中的節點數。
你要返回的陣列也必然是乙個n * n的二維陣列,表示從i出發走到j,經過m條邊的最短路徑
你的路徑中應考慮包含重複邊的情況。
這個題目要求在30分鐘內解決,臣妾做不到的說。先來看看題目解析。
題目解析:該題目要求在m次選擇中,計算出i與j之間距離最短的值,是一種動態規劃題型,因此我們用動態規劃方式解答(c++):
#include using namespace std;
void solve(int n,int m,int** map,int** res)}}
}for(j=0;j>n;
cin>>m;
int **map=new int*[n];
int **res=new int*[n];
for(i=0;i>map[i][j];
for(i=0;i以上是動態規劃過程,我們從中可以看一下for巢狀的個數,可以發現,該演算法的複雜度為o(n^3*m),與要求的不符合,如何做到時間複雜度為o(n^3logm)呢?
我們觀察到,我們求取步驟中,其實做了很多的無用功,比如我有4個小朋友,我要求得4段距離總和最小,如果用上面的程式,先求得2段距離最小,然後3段,然後4段,其實在後面基本上都是在原本地圖矩陣上查詢,地圖矩陣i與j之間的距離是1段的距離,當我們計算出2段距離最小時,其實可以將該矩陣作為新的地圖,即i與j之間是2段的距離,以此類推,我可以通過4段距離最小矩陣求得8段距離矩陣。此時我們需要用到遞迴,程式如下:
void solve(int n,int m,int** map,int** res)
return;
} solve(n, a, map, r);
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
for (k = 0; k < n; k++)
if (e[i][j] > r[i][k] + r[k][j])
e[i][j] = r[i][k] + r[k][j];
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
if (b == 1) }
int main()
; for (i = 0; i < n; i++) }
//求解
solve(n, m, map, r);
//列印
for (i = 0; i < n; i++)
cout << endl;
} return 0;
}
//複雜度n^3 * m
#include using namespace std;
void solve(int n, int m, vector>& map, vector>& res)}}
} for (int j = 0; j < n; j++)
res[i][j] = e[j][m - 1];
}};int main()
; for (i = 0; i < n; i++) }
solve(n, m, map, r);
for (i = 0; i < n; i++)
return 0;
}
阿里巴巴2023年提前批程式設計題解析
光明小學的小朋友們要舉行一年一度的接力跑大賽了,但是小朋友們卻遇到了乙個難題 設計接力跑大賽的線路,你能幫助他們完成這項工作麼?光明小學可以抽象成一張有n個節點的圖,每兩點間都有一條道路相連。光明小學的每個班都有m個學生,所以你要為他們設計出一條恰好經過m條邊的路徑。光明小學的小朋友們希望全盤考慮所...
阿里巴巴 2023年研發類筆試題
單選題 1.下列說法錯誤的是 a.b.c.千兆網絡卡的讀寫速度是1gb s.d.ddr3記憶體的速度是100gb s 2.下面不能用作linux程序間通訊的是 a.共享記憶體 b.管道名 c.訊號量 d.臨界區 3.cpu和i 0一次只能處理乙個程式,現有 p1 計算40ms i o80ms 計算4...
2023年阿里巴巴校招筆試題
校招找工作的同學,可以看看,非常有幫助!推薦 產品經理 阿里巴巴2015校園招聘筆試題 研發工程師 阿里巴巴2015校園招聘筆試題 研發工程師 阿里巴巴2015校園招聘筆試題2 國際安全運營專員 阿里巴巴2015校園招聘筆試題1 產品運營 阿里巴巴2015校園招聘筆試題1 前端開發工程師 阿里巴巴2...