第一问伪代码:
main()/*----------------------------------------------启动函数--------------------------------------*/
{
启动Doctor函数,传入参数n==0;
for(q=1;q<iCount;q++){
if(max<=b[q])
{ max=b[q];
j=q+1;
}
EDN FOR
}
void Doctor(int n) /*---------------------------------主要分配函数---------------------------------*/
{
int i;
if(n == DOCTOR) //----------------------------------------判断n是否等于5,如果等于5,则调用输出函数,否则进入for循环
{
Output();
return;
}
for(i = 0 ; i < DOCTOR ; i++) //--------------------------n还没到5,在第n行的各个行上依次试探。
{
Site[n] = i; //-------------------------------------记录列数。
if(IsValid(n)) //-------------------------------如果记录没有冲突,就开始下一行的试探。
Doctor(n + 1);//--------------------------------递归调用Doctor()函数,使形式参数每次调用加一
}
}
int IsValid(int n) /*----------------------------------主要判断函数---------------------------------*/
{
int i;
for(i = 0 ; i < n ; i++) //--------------------------------判断数组元素是否在同一列上,如果是,返回0
{ if(Site[i] == Site[n])
return 0;
}
return 1; //------------------------------------------------没有冲突,返回1。
}
void Output()/*----------------------------------------主要输出函数-----------------------------------*/
{
输出方案序号。
for(i = 0 ; i < DOCTOR ; i++)//--------------------------依次输出各个方案的位置。
{
printf("%c " , project[Site[i]]);
sum+=a[i][Site[i]];//---------------------------计算每个方案的结果。
b[p]=sum;//---------------------------------储存sum到b数组。
}
END for
p++;//-------------------------------------------------------每递归一次储存数组加一。
输出每个方案的满意度。
}
hfg
最新推荐文章于 2022-05-15 20:56:13 发布