工作分配问题
来源:互联网 发布:安卓模拟器mac版玩崩坏 编辑:程序博客网 时间:2024/04/30 14:49
代码如下
#include<stdio.h>
int N,x[100],bestx[100],f,bestf;
int matrix[100][100];
int backtrack(int i);
void swap(int *x,int i,int j);
int main()
{
int i,j;
f=0;bestf=1000;
scanf("%d",&N);
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
scanf("%d",&matrix[i][j]);
for(i=1;i<=N;i++)
x[i]=i;
backtrack(1);
for(i=1;i<=N;i++)
printf("%d",bestx[i]);
printf("/n%d",bestf);
return 0;
}
int backtrack(int i)
{
int j;
if(i>=N+1)
{
bestf=f;
for(j=1;j<=N;j++)
bestx[j]=x[j];
return 0;
}
for(j=i;j<=N;j++)
{
f+=matrix[i][x[j]];
if(f<bestf) //控制递归的条件,剪枝条件;
{
swap(x,i,j);
backtrack(i+1);
swap(x,i,j);
}
f-=matrix[i][x[j]];
}
return 0;
}
void swap(int *x,int i,int j)
{
int t;
t=x[i];
x[i]=x[j];
x[j]=t;
}
总结:
在做此类全排列回鎙题时,要特别注意在回鎙之前和回鎙之后的状态;
- 工作分配问题
- 工作分配问题
- 17085 工作分配问题
- 工作分配问题
- 工作分配问题
- 【9503】工作分配问题
- 工作分配问题
- 工作分配问题
- 工作分配问题
- 工作分配问题
- 工作分配问题
- 工作分配问题 Java 回溯
- 【回溯法】工作分配问题
- 工作分配问题 assignment problem
- 工作分配问题 解题报告
- 匹配(工作分配问题)
- 工作分配问题pascal程序
- 应用分枝限界解决工作分配问题
- 2010年5月8日 昨晚的神奇梦境
- eclipse调试详解
- 配置文件
- 弹出窗口函数MessageBox用法、分析及相应源代码(转帖)
- 从飞鸽传书口水仗想到的
- 工作分配问题
- 用PHP实现手机归属地查询api接口
- 并发和竞态
- kgfnxfg
- DirectX中Mesh的子集
- Converters from LaTeX to PC Textprocessors - Overview
- utuLinux内核定制编译全攻略
- 怎样把自己培养成为一个优秀的程序员
- log4j配置文件的例子