⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 回溯法.c

📁 C++经典算法之 回溯法 常用算法 方便使用
💻 C
字号:
#include<stdio.h>
#define N 4

int c[N][N];
unsigned int mincost=65535;
int task[N],temp[N],worker[N];

void plan(int k, unsigned int cost)
{
     int i;
     if (k>=N&&cost<mincost)
     {
		 mincost=cost;
		 for (i=0;i<N;i++)
		 {
			 temp[i]=task[i];
		 }
     } 
     else
     {
		 for (i=0;i<N;i++)
		 {
			 if (worker[i]==0&&cost+c[k][i]<mincost)
			 {
				 worker[i]=1;task[k]=i;
				 plan(k+1,cost+c[k][i]);
				 worker[i]=0;task[k]=0;
				 
			 }
		 }
     }
}

void main()
{
	int i,j;
	for (i=0;i<N;i++)
	{
		worker[i]=0;
		task[i]=0;
		temp[i]=0;
		for(j=0;j<N;j++)
			scanf("%d ",&c[i][j]);
	}
	plan(0,0);
	printf("\n最小费用=%d\n",mincost);
	for (i=0;i<N;i++)
	{
		printf("task%d is assigned to Worker%d\n",i,temp[i]);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -