#include
using
namespace std;
typedef
long
long ll;
const
int maxn=
1e5+5;
const
int inf=
0x3f3f3f3f
;int n,c[20]
[20];
//將工作i分配給第j個人所需要的費用
//每個人分配到乙個對應的工作,n個工作分別分配給n個人
int vis[20]
;//vis陣列標記已經被分配了的工作,不重複分配
int ans=inf,sum=0;
//求最小費用,ans初始化為無窮大
//sum初始化為0,在計算回溯的過程中,回溯到最開始的點時自動為0
void
dfs(
int x,
int y)
for(
int j=
1;j<=n;j++)}
}int
main()
}dfs(0
,0);
cout
}
工作分配問題 (回溯法)
工作分配問題 time limit 1000 ms memory limit 65536 kib problem description 設有n件工作分配給n個人。將工作i分配給第j個人所需的費用為 cij。試設計乙個演算法,為每乙個人都分配1 件不同的工作,並使總費用達到最小。設計乙個演算法,對於...
回溯法解決工作分配問題及分析
工作分配問題 設有n件工作分配給n個人。將工作i分配給第j個人所需的費用為cij 設計乙個演算法,對於給定的工作費用,為每乙個人都分配1 件不同的工作,並使總費用達到最小。輸入格式 輸入資料的第一行有1 個正整數n 1 n 20 接下來的n行,每行n個數,表示工作費用。輸出格式 將計算出的最小總費用...
回溯法 n皇后問題 DFS
在n n的棋盤上放置彼此不受攻擊的n個皇后。按照西洋棋的規則,皇后可以攻擊與之在同一行,同一列,同一斜線上的棋子。現在在n n的棋盤上放置n個皇后,使彼此不受攻擊。在放置皇后的過程中,我們要考慮三個方面,不能同行,不能同列,不能同對角線。那麼就可以從行出發,即每個皇后放在一行中,這樣只需考慮與已放置...