description
設有n件工作分配給n個人。將工作i分配給第j個人所需的費用為 cij。試設計乙個演算法,為每乙個人都分配1 件不同的工作,並使總費用達到最小。
設計乙個演算法,對於給定的工作費用,計算最佳工作分配方案,使總費用達到最小。
input
輸入資料的第一行有1 個正整數n (1≤n≤20)。接下來的n行,每行n個數,表示工作費用。
output
將計算出的最小總費用輸出。
sample
input
310 2 3
2 3 4
3 4 5
output
9思想:(僅供參考)n件工作就會有n個人與之對應,相當於就是有n棵樹,每棵樹都有n個節點。第一顆樹的第乙個第乙個節點相當於就是乙個乙個人選的第一件工作,第n個節點就是第乙個人選的第n件工作,以此類推。b[i])就用來判斷工作是否被選了,如果第乙個人選定了第一件工作,那麼後面的人就不能再選了。 if (!b[i])這個就是個判斷條件。剩下的就是對這個樹的一遍遍的遍歷了。
#include.h>
using namespace std;
int a[22]
[22],b[22]
;int sum=0;
int maxx=
999999
;int n;
void
dfs(int sdep)
if(sdep!=n)
} sum-=a[sdep]
[i];
b[i]=0
;}}}
int main()
}dfs(1
);cout
}
搜尋演算法(迷宮問題)
盼來盼去終於又要開始學習演算法了!筆者自學演算法,所以學習順序以個人舒服的形式!用例子來看 問題 有乙個迷宮,以1 2形式來表示 1表示是空地,即可以行走,2表示是障礙物,即無法通行。該迷宮由乙個矩陣形式表示。即1 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 1 2 有終點和...
A 搜尋演算法
啟發式搜尋演算法 要理解 a 搜尋演算法,還得從啟發式搜尋演算法開始談起。所謂啟發式搜尋,就在於當前搜尋結點往下選擇下一步結點時,可以通過乙個啟發函式 來進行選擇,選擇代價最少的結點作為下一步搜尋結點而跳轉其上 遇到有乙個以上代價最 少的結點,不妨選距離當前搜尋點最近一次展開的搜尋點進行下一步搜尋 ...
A 搜尋演算法
a 演算法是基於bfs的一種入門級啟發式搜尋演算法,就是將bfs的佇列改為基於估價的優先佇列,可以快速地找到答案。優先隊列為小根堆 while 優先佇列不為空 取出隊頭並擴充套件 將擴充套件節點以估價值 當前值為優先順序入隊 endwhile估價函式越接近真實值演算法越優,但一定不能大於真實值,否則...