亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? 000.cpp

?? 運(yùn)籌學(xué)之指派問(wèn)題的匈牙利算法。剛剛才看到的
?? CPP
字號(hào):
/**********************************************************************\
*                    指派問(wèn)題的匈牙利算法                              *
*                                                                      *
*                         張志亮                                       *
*                                                                      *
*                                                                      *
*                                                                      * 
*                                                                      *
*               河海大學(xué)商學(xué)院信息管理與信息系統(tǒng)專業(yè)                   *
*                                                                      *
*                                                                      *
\**********************************************************************/






#include<stdio.h>

typedef struct matrix
{
	float cost[101][101];
    int zeroelem[101][101];
	float costforout[101][101];
	int matrixsize;
	int personnumber;
	int jobnumber;
}matrix;

matrix sb;
int result[501][2];

void twozero(matrix &sb);
void judge(matrix &sb,int result[501][2]);
void refresh(matrix &sb);
void circlezero(matrix &sb);
matrix input();
void output(int result[501][2],matrix sb);
void zeroout(matrix &sb);






matrix input()
{
	matrix sb;
	int m;
	int pnumber,jnumber;
	int i,j;
	float k;
	char w;
	printf("指派問(wèn)題的匈牙利解法:\n");
	printf("max,請(qǐng)輸入1;min,請(qǐng)輸入0:\n");
	scanf("%d",&m);
	while (m!=1&&m!=0)
	{	
		printf("請(qǐng)輸入1或0:\n");
		scanf("%d",&m);
	}
	printf("請(qǐng)輸入人數(shù)(人數(shù)介于1和100之間):\n");
	scanf("%d",&pnumber);
	while(pnumber<1 || pnumber>100)
	{
		printf("請(qǐng)輸入合法數(shù)據(jù):\n");
		scanf("%d",&pnumber);
	}
	printf("請(qǐng)輸入工件數(shù)(介于1和100之間):\n");
	scanf("%d",&jnumber);
	while(jnumber<1 || jnumber>100)
	{
		printf("請(qǐng)輸入合法數(shù)據(jù):\n");
		scanf("%d",&jnumber);
	}
	printf("請(qǐng)輸入%d行%d列的矩陣,同一行內(nèi)以空格間隔,不同行間以回車分隔:\n",pnumber,jnumber);
	for(i=1;i<=pnumber;i++)
		for(j=1;j<=jnumber;j++)
		{
			scanf("%f",&sb.cost[i][j]);
			sb.costforout[i][j]=sb.cost[i][j];
		}
	scanf("%c",&w);        //吸收回車符
	if(jnumber>pnumber)
		for(i=pnumber+1;i<=jnumber;i++)
			for(j=1;j<=jnumber;j++)
			{
				sb.cost[i][j]=0;
				sb.costforout[i][j]=0;
			}
	else
	{
		if(pnumber>jnumber)
			for(i=1;i<=pnumber;i++)
				for(j=jnumber+1;j<=pnumber;j++)
				{
					sb.cost[i][j]=0;
					sb.costforout[i][j]=0;
				}

	}
	sb.matrixsize=pnumber;
	if(pnumber<jnumber)
		sb.matrixsize=jnumber;
	sb.personnumber=pnumber;
	sb.jobnumber=jnumber;
	if(m==1)
	{
		k=0;
		for(i=1;i<=sb.matrixsize;i++)
			for(j=1;j<=sb.matrixsize;j++)
				if(sb.cost[i][j]>k)
					k=sb.cost[i][j];
		for(i=1;i<=sb.matrixsize;i++)
			for(j=1;j<=sb.matrixsize;j++)
				sb.cost[i][j]=k-sb.cost[i][j];
	}
	return sb;
}//input


void circlezero(matrix &sb)
{
	int i,j;
	float k;
	int p;
	for(i=0;i<=sb.matrixsize;i++)
		sb.cost[i][0]=0;
	for(j=1;j<=sb.matrixsize;j++)
		sb.cost[0][j]=0;
	for(i=1;i<=sb.matrixsize;i++)
		for(j=1;j<=sb.matrixsize;j++)
			if(sb.cost[i][j]==0)
			{
				sb.cost[i][0]++;
				sb.cost[0][j]++;
				sb.cost[0][0]++;
			}
	for(i=0;i<=sb.matrixsize;i++)
		for(j=0;j<=sb.matrixsize;j++)
			sb.zeroelem[i][j]=0;
	  
	k=sb.cost[0][0]+1;
	while(sb.cost[0][0]<k)
	{
		k=sb.cost[0][0];
		for(i=1;i<=sb.matrixsize;i++)
		{
			if(sb.cost[i][0]==1)
			{
				for(j=1;j<=sb.matrixsize;j++)
					if(sb.cost[i][j]==0&&sb.zeroelem[i][j]==0)
						break;
				sb.zeroelem[i][j]=1;
				sb.cost[i][0]--;
				sb.cost[0][j]--;
				sb.cost[0][0]--;
				if(sb.cost[0][j]>0)
					for(p=1;p<=sb.matrixsize;p++)
						if(sb.cost[p][j]==0&&sb.zeroelem[p][j]==0)
						{
							sb.zeroelem[p][j]=2;
							sb.cost[p][0]--;
							sb.cost[0][j]--;
							sb.cost[0][0]--;
						}
			}
		}
		for(j=1;j<=sb.matrixsize;j++)
		{
			if(sb.cost[0][j]==1)
			{
				for(i=1;i<=sb.matrixsize;i++)
					if(sb.cost[i][j]==0&&sb.zeroelem[i][j]==0)
						break;
				sb.zeroelem[i][j]=1;
				sb.cost[i][0]--;
				sb.cost[0][j]--;
				sb.cost[0][0]--;
				if(sb.cost[i][0]>0)
					for(p=1;p<=sb.matrixsize;p++)
						if(sb.cost[i][p]==0&&sb.zeroelem[i][p]==0)
						{
							sb.zeroelem[i][p]=2;
							sb.cost[i][0]--;
							sb.cost[0][p]--;
							sb.cost[0][0]--;
						}
			}
		}
	}//while
	if(sb.cost[0][0]>0)
		twozero(sb);
	else
		judge(sb,result);
}//circlezero


void twozero(matrix &sb)
{
	int i,j;
	int p,q;
	int m,n;
	float k;
    matrix st;
	for(i=1;i<=sb.matrixsize;i++)
		if(sb.cost[i][0]>0)
			break;
	if(i<=sb.matrixsize)
	{
		for(j=1;j<=sb.matrixsize;j++)
		{
			st=sb;//pay attention
			if(sb.cost[i][j]==0&&sb.zeroelem[i][j]==0)
			{
				sb.zeroelem[i][j]=1;
				sb.cost[i][0]--;
				sb.cost[0][j]--;
				sb.cost[0][0]--;
				for(q=1;q<=sb.matrixsize;q++)
					if(sb.cost[i][q]==0&&sb.zeroelem[i][q]==0)
					{
						sb.zeroelem[i][q]=2;
						sb.cost[i][0]--;
						sb.cost[0][q]--;
						sb.cost[0][0]--;
					}
				for(p=1;p<=sb.matrixsize;p++)
					if(sb.cost[p][j]==0&&sb.zeroelem[p][j]==0)
					{
						sb.zeroelem[p][j]=2;
						sb.cost[p][0]--;
						sb.cost[0][j]--;
						sb.cost[0][0]--;
					}

				k=sb.cost[0][0]+1;
				while(sb.cost[0][0]<k)
				{
					k=sb.cost[0][0];
					for(p=i+1;p<=sb.matrixsize;p++)
					{
						if(sb.cost[p][0]==1)
						{
							for(q=1;q<=sb.matrixsize;q++)
								if(sb.cost[p][q]==0&&sb.zeroelem[p][q]==0)
									break;
							sb.zeroelem[p][q]=1;
							sb.cost[p][0]--;
							sb.cost[0][q]--;
							sb.cost[0][0]--;
							for(m=1;m<=sb.matrixsize;m++)
								if(sb.cost[m][q]=0&&sb.zeroelem[m][q]==0)
								{
									sb.zeroelem[m][q]=2;
									sb.cost[m][0]--;
									sb.cost[0][q]--;
									sb.cost[0][0]--;
								}
						}//if
					}//for
					for(q=1;q<=sb.matrixsize;q++)
					{
						if(sb.cost[0][q]==1)
						{
							for(p=1;p<=sb.matrixsize;p++)
								if(sb.cost[p][q]==0&&sb.zeroelem[p][q]==0)
									break;
							sb.zeroelem[p][q]=1;
							sb.cost[p][q]--;
							sb.cost[0][q]--;
							sb.cost[0][0]--;
							for(n=1;n<=sb.matrixsize;n++)
								if(sb.cost[p][n]==0&&sb.zeroelem[p][n]==0)
								{
									sb.zeroelem[p][n]=2;
									sb.cost[p][0]--;
									sb.cost[0][n]--;
									sb.cost[0][0]--;
								}
						}//if
					}//for
				}//while
				if(sb.cost[0][0]>0)
					twozero(sb);
				else 
					judge(sb,result);
			}//if->p5	          
			sb=st;
		}//for->p5
	}//if->p5
}//twozero


void judge(matrix &sb,int result[501][2])
{
	int i,j;
	int m;
	int n;
	int k;
	m=0;
	for(i=1;i<=sb.matrixsize;i++)
		for(j=1;j<=sb.matrixsize;j++)
			if(sb.zeroelem[i][j]==1)
				m++;
	if(m==sb.matrixsize)
	{
		k=1;
		for(n=1;n<=result[0][0];n++)
		{
			for(i=1;i<=sb.matrixsize;i++)
			{
				for(j=1;j<=sb.matrixsize;j++)
					if(sb.zeroelem[i][j]==1)
						break;
				if(i<=sb.personnumber&&j<=sb.jobnumber)
					if(j!=result[k][1])
						break;
				k++;
			}
			if(i==sb.matrixsize+1)
				break;
			else
				k=n*sb.matrixsize+1;
		}
		if(n>result[0][0])
		{
			k=result[0][0]*sb.matrixsize+1;
			for(i=1;i<=sb.matrixsize;i++)
				for(j=1;j<=sb.matrixsize;j++)
					if(sb.zeroelem[i][j]==1)
					{
						result[k][0]=i;
						result[k++][1]=j;
					}
			result[0][0]++;
		}
	}
	else
	{
		refresh(sb);
	}
}//judge


void refresh(matrix &sb)
{
	int i,j;
	float k;
	int p;
	k=0;

	for(i=1;i<=sb.matrixsize;i++)
	{
		for(j=1;j<=sb.matrixsize;j++)
			if(sb.zeroelem[i][j]==1)
			{
				sb.zeroelem[i][0]=1;         //有獨(dú)立零元素
				break;
			}
	}
	while(k==0)
	{
		k=1;
		for(i=1;i<=sb.matrixsize;i++)
			if(sb.zeroelem[i][0]==0)
			{
				sb.zeroelem[i][0]=2;
				for(j=1;j<=sb.matrixsize;j++)
					if(sb.zeroelem[i][j]==2)
					{
						sb.zeroelem[0][j]=1;
					}
			}
		for(j=1;j<=sb.matrixsize;j++)
		{
			if(sb.zeroelem[0][j]==1)
			{
				sb.zeroelem[0][j]=2;
				for(i=1;i<=sb.matrixsize;i++)
					if(sb.zeroelem[i][j]==1)
					{
						sb.zeroelem[i][0]=0;
						k=0;
					}
			}
		}
	}                    //為2的行或者列是打"√"的
	p=0;
	k=0;
	for(i=1;i<=sb.matrixsize;i++)
	{
		if(sb.zeroelem[i][0]==2)
		{
			for(j=1;j<=sb.matrixsize;j++)
			{
				if(sb.zeroelem[0][j]!=2)
					if(p==0)
					{
						k=sb.cost[i][j];
						p=1;
					}
					else
					{
						if(sb.cost[i][j]<k)
							k=sb.cost[i][j];
					}
			}
		}
	}
	for(i=1;i<=sb.matrixsize;i++)
	{
		if(sb.zeroelem[i][0]==2)
			for(j=1;j<=sb.matrixsize;j++)
				sb.cost[i][j]=sb.cost[i][j]-k;
	}

	for(j=1;j<=sb.matrixsize;j++)
	{
		if(sb.zeroelem[0][j]==2)
			for(i=1;i<=sb.matrixsize;i++)
				sb.cost[i][j]=sb.cost[i][j]+k;
	}                                 //化簡(jiǎn)矩陣
	for(i=0;i<=sb.matrixsize;i++)
		for(j=0;j<=sb.matrixsize;j++)
			sb.zeroelem[i][j]=0;              //清0
	circlezero(sb);	
}//refresh


void zeroout(matrix &sb)
{
	int i,j; 
	float k;
	for(i=1;i<=sb.matrixsize;i++)
	{
		k=sb.cost[i][1];
		for(j=2;j<=sb.matrixsize;j++)
			if(sb.cost[i][j]<k)
				k=sb.cost[i][j];
		for(j=1;j<=sb.matrixsize;j++)
			sb.cost[i][j]=sb.cost[i][j]-k;
	}
	for(j=1;j<=sb.matrixsize;j++)
	{
		k=sb.cost[1][j];
		for(i=2;i<=sb.matrixsize;i++)
			if(sb.cost[i][j]<k)
				k=sb.cost[i][j];
		for(i=1;i<=sb.matrixsize;i++)
			sb.cost[i][j]=sb.cost[i][j]-k;
	}
}//zeroout


void output(int result[501][2],matrix sb)
{
	int k;
	int i;
	int j;
	int p;
	char w;
	float v;

	v=0;
	for(i=1;i<=sb.matrixsize;i++)
	{
		v=v+sb.costforout[i][result[i][1]];
	}
	printf("最優(yōu)解的目標(biāo)函數(shù)值為%f.\n",v);

	k=result[0][0];
	if(k>5)
	{
		printf("解的個(gè)數(shù)超過(guò)了限制.\n");
		k=5;
	}
	for(i=1;i<=k;i++)
	{
		printf("按任意鍵輸出第%d種解.\n",i);
		scanf("%c",&w);
		p=(i-1)*sb.matrixsize+1;
		for(j=p;j<p+sb.matrixsize;j++)
			if(result[j][0]<=sb.personnumber&&result[j][1]<=sb.jobnumber)
				printf("第%d個(gè)人做第%d件工作.\n",result[j][0],result[j][1]);
		printf("\n");
	}
}//output


void main()
{
	result[0][0]=0;
	sb=input();
	zeroout(sb);
	circlezero(sb);
	output(result,sb);
}//main

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲精品中文字幕| 欧美日本一区二区三区| 国产精品免费网站在线观看| 99精品国产热久久91蜜凸| 日本成人在线网站| 亚洲精品在线三区| 91小宝寻花一区二区三区| 美女脱光内衣内裤视频久久网站 | 色国产精品一区在线观看| 欧美韩国日本不卡| 日韩欧美中文一区二区| 色综合久久久久久久| 激情欧美一区二区三区在线观看| 悠悠色在线精品| 中文字幕免费一区| 欧美极品美女视频| 国产视频一区不卡| 亚洲视频一区二区免费在线观看| www.久久久久久久久| 国产乱妇无码大片在线观看| 久久精品国产秦先生| 亚洲大型综合色站| 亚洲成人一区在线| 日韩中文字幕91| 日本亚洲最大的色成网站www| 亚洲国产乱码最新视频 | 中文字幕一区二区日韩精品绯色| 国产欧美一区二区三区沐欲| 国产日韩精品视频一区| 日本一区二区三级电影在线观看| 欧美国产激情二区三区| 亚洲欧洲韩国日本视频| 亚洲成在线观看| 久草精品在线观看| 国产黑丝在线一区二区三区| 成人av网站在线| 欧美日韩国产片| 2021中文字幕一区亚洲| 一区二区三区日韩欧美| 亚洲精品免费在线播放| 激情综合网天天干| 日韩免费电影一区| 亚洲国产视频在线| 欧美写真视频网站| 日本一区二区视频在线观看| 精彩视频一区二区三区| 日韩一区二区高清| 美日韩一区二区三区| 欧美一区二区三区四区五区| 亚洲成年人网站在线观看| 69成人精品免费视频| 日本不卡一二三区黄网| 国产激情精品久久久第一区二区| 欧美另类久久久品| 日韩专区一卡二卡| 秋霞影院一区二区| 色哟哟欧美精品| 久久久久国产精品厨房| 蜜桃一区二区三区四区| 欧美日韩综合不卡| 亚洲美女屁股眼交3| 风间由美性色一区二区三区| 精品久久一二三区| 青青草一区二区三区| 欧美影院一区二区| 亚洲视频免费看| 高清不卡一区二区| 久久亚洲私人国产精品va媚药| 亚洲国产中文字幕在线视频综合 | 亚洲国产成人在线| 国产一区二区影院| 精品国产区一区| 国产在线精品免费| 久久午夜国产精品| 欧美日韩在线播放一区| 亚洲欧美日韩在线不卡| 日韩精品一二三四| av在线不卡免费看| 日韩三级伦理片妻子的秘密按摩| 日韩欧美国产综合| 日本中文字幕一区| 91污在线观看| 国产精品久久久久久久久免费相片 | 精品日韩av一区二区| 国产美女av一区二区三区| 久久亚洲精华国产精华液| 成人免费视频视频| 综合亚洲深深色噜噜狠狠网站| 色婷婷香蕉在线一区二区| 亚洲二区在线观看| 精品成人私密视频| 99re这里只有精品6| 日韩福利电影在线| 久久久久久久一区| 91福利在线看| 另类综合日韩欧美亚洲| 国产日韩欧美在线一区| 欧美性猛交一区二区三区精品| 日本不卡免费在线视频| 玉米视频成人免费看| 欧美一区二区黄| 99视频一区二区| 激情偷乱视频一区二区三区| 亚洲一区二区三区在线看| 久久亚洲捆绑美女| 欧美丰满高潮xxxx喷水动漫| 丁香六月久久综合狠狠色| 丝袜美腿亚洲一区| 1024成人网色www| 国产亚洲精品精华液| 欧美日韩亚洲综合一区| 国产成人免费视频一区| 日韩av一区二区在线影视| 一区二区在线免费| 国产精品久久久久久久久免费丝袜 | 欧美日高清视频| av福利精品导航| 国产精品亚洲综合一区在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲乱码国产乱码精品精98午夜| 国产亚洲人成网站| 国产午夜亚洲精品不卡| 久久视频一区二区| 日韩欧美激情一区| 日韩午夜在线影院| 欧美一级午夜免费电影| 欧美丰满高潮xxxx喷水动漫| 欧美麻豆精品久久久久久| 欧美日韩久久久| 91麻豆精品国产91| 欧美本精品男人aⅴ天堂| 精品国产乱码久久久久久牛牛| 日韩欧美成人激情| 日韩视频不卡中文| 久久新电视剧免费观看| 久久精品日产第一区二区三区高清版 | 中文字幕制服丝袜一区二区三区| 精品播放一区二区| 久久久av毛片精品| 中文字幕 久热精品 视频在线| 国产精品五月天| 亚洲免费观看高清| 视频一区二区三区入口| 麻豆国产一区二区| 国产一区日韩二区欧美三区| 成人av动漫网站| 欧美日韩中文另类| 国产三区在线成人av| 亚洲一区二区三区小说| 国产一区视频导航| 欧美性一级生活| 国产欧美一区二区精品性色超碰| 亚洲欧美日韩久久| 国产一区二区三区蝌蚪| 91啦中文在线观看| 欧美精品一区二区久久久 | 夜夜嗨av一区二区三区| 另类的小说在线视频另类成人小视频在线 | 91精品福利视频| 久久免费偷拍视频| 日韩av电影免费观看高清完整版在线观看| 国产伦精一区二区三区| 欧美精品国产精品| 亚洲狠狠丁香婷婷综合久久久| 色哟哟一区二区三区| 国产日韩精品一区二区三区在线| 亚洲午夜电影网| 91麻豆视频网站| 1024国产精品| 一本久久a久久免费精品不卡| 久久天天做天天爱综合色| 日本女优在线视频一区二区| 在线亚洲高清视频| 亚洲男人电影天堂| 91热门视频在线观看| 亚洲三级在线播放| 成人禁用看黄a在线| 国产精品久久久久一区二区三区共| 国产一区二区毛片| 国产精品嫩草影院com| 成人av集中营| 亚洲一区二区三区国产| 欧美另类变人与禽xxxxx| 午夜精品一区二区三区电影天堂| 成人精品国产一区二区4080| 日韩一区中文字幕| 精品一区二区三区av| 国产精品入口麻豆九色| av亚洲精华国产精华精华| 国产伦精品一区二区三区免费| 欧美福利一区二区| 日韩一级欧美一级| 色综合 综合色| 国产精品影视在线观看| 日韩电影在线免费| 亚洲午夜一区二区三区| 国产精品麻豆久久久| 精品国产1区二区| 欧美tk—视频vk| 欧美一区二区三区免费视频|