1. 程式人生 > >第五章實踐報告

第五章實踐報告

一.工作分配問題

 

二.設有n件工作分配給n個人。將工作i分配給第j個人所需的費用為cij 。 設計一個演算法,對於給定的工作費用,為每一個人都分配1 件不同的工作,並使總費用達到最小。

 

三.排列數問題,可結合回溯法完成

 

四.

#include<cstdio>
#include<iostream>
using namespace std;
#define CHUZ 1<<23;
int n, m;
int a[21][21], vis[21] = {0};
void dfs(int i, int cnt)
{
if(cnt > m)return ;
if(i == n)
{
m = (cnt < m ? cnt : m);
return ;
}
for(int j = 0; j < n; j++)
{
if(!vis[j])
{
vis[j] = 1;
dfs(i + 1, cnt + a[i][j]);
vis[j] = 0;
}
}
}
int main()
{
int i, j;
while(scanf("%d", &n) != EOF)
{
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
scanf("%d", &a[i][j]);
m = CHUZ;
dfs(0, 0);
printf("%d\n", m);
}
return 0;
}

 

五.對回溯法理解加深了