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

📄 大作业.cpp

📁 简易教学任务安排 假设有n门课程需要n个教师去授课
💻 CPP
字号:
#include<iostream.h>
#include<stdlib.h>
#define max 100
typedef struct AdjType
{
	int adj;
}sx[max][max],dx[max];
///////////////

void creat(sx s,dx D,int n)
{
	int i,j;
	for(i=1;i<=n;i++)
	{
		D[i].adj=0;

		for(j=1;j<=n;j++)
		s[i][j].adj=0;
	}
	
}
/////////////

void techer_speciality(sx s,int i,int k)
{
	s[i][k].adj=1;
}
//////////////

int serch(int i,int j,sx s,int n)//
{
	for(;j<=n;j++)
		if(s[i][j].adj==1)break;
		
		return(j);
}

/////////
int serch_error(sx s,dx D,int n,int k[])
{
	int t;
	for(int j=1;j<=n;j++)
		if(k[j]==0)
			for(int i=1;i<=n;i++)
				if(s[i][j].adj==1)
				{
					if(D[i].adj==0)return 0;
					t=D[i].adj;D[i].adj=j;k[t]=0;return 1;
				}
				return 0;
}
/////////////////
void anpai(dx D,int n,sx s)
{
	int c[max]={0},j, js, p=0,t;
	static int k[max]={0};

	for(int i=1;i<=n;i++)
		if(D[i].adj==0)
		{j=1;
		while(1)
		{
			js=serch(i,j,s,n);
			if(js<=n)
			{
				c[p++]=js;//保存从serch里返回的教师专长
				if(k[js]<=0)
				{
					D[i].adj=js;k[js]=i;p=0;break;
				}
				else {j=js;j++;}
			}
			else {
				//if(js>n)
				if(p>1)p=p-2;else p=p-1;	
				t=k[c[p]];
				j=c[p]+1;
				while(1)
				{
					js=serch(t,j,s,n);

					if(k[js]<=0&&js<=n)
					{
						D[t].adj=js;k[js]=t;D[i].adj=c[p];k[c[p]]=i;p=0;break;
					}
					else if(js<=n)j++;
					else {
						p++;

						if(c[p]==0)
						{
							D[i].adj=0;if(serch_error(s,D,n,k))anpai(D,n,s);break;
						}

					t=c[p];j=c[p]+1;
					}//while
				}
				break;
			}
		}//while
		}//if
}
/////////////////

void display(dx D,int n)
{
	for(int i=1;i<=n;i++)
		cout<<i<<":"<<D[i].adj<<"    ";
}

/////////////////
void edit(sx s, int n)
{int k,i;
cout<<"请输入要修改的老师:"<<endl;
cin>>i;
cout<<"第"<<i<<"个老师的专长科目是:"<<endl;
for(k=1;k<=n;k++)
{if(s[i][k].adj==1)
cout<<k<<'\n';
}
cout<<"输入你要修改的科目:"<<endl;

		do {
cin>>k;
if(s[i][k].adj==1)
s[i][k].adj=0;
else s[i][k].adj=1;
		}while(k);

cout<<"修改后第"<<i<<"个老师的专长科目是:"<<endl;
for(k=1;k<=n;k++)
{if(s[i][k].adj==1)
cout<<k<<'\n';

}

}


void main()
{
	sx s;dx D;int n,k;
	cout<<"请输入课程数n:\n";
	cin>>n;
	creat(s,D,n);
	
	cout<<"请输入教师专业特长编号(1-"<<n<<")输入0结束:\n";

	for(int i=1;i<=n;i++)
	{
		cout<<"教师编号"<<i<<":";
		do {
			cin>>k;
			s[i][k].adj=1;//techer_speciality(s,i,k);for(k=1;k<=n;k++)cout<<s[i][k].adj<<"    ";	
		}while(k);
	}
    edit(s, n);
	anpai(D,n,s);

	display(D,n);

}

⌨️ 快捷键说明

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