国内最大的教育考试网站之一
2008年12月软考软件设计师每日一练(12月18日)
2008-12-18 13:36:02 来源:优易学(Qnr.Cn) 作者:Qnr.Cn

试题5
请阅读以下函数说明和C代码,将程序段中(1)~(5)空缺处的语句填写完整。(15分)
【说明】
著名的四色定理指出任何平面区域图均可用4种颜色着色,使相邻区域着不同的颜色。以下C程序对给定的区域图找出所有可能的不超过4种颜色的着色方案。该程序中用1~4分别表示4种颜色。要着色的N个区域用0~N-1编号,区域相邻关系用adj[][]矩阵表示,矩阵的i行j列的元素为1,表示区域i与区域j相邻;矩阵的i行j列的元素为0,表示区域i与区域j不相邻。数组color[]用来存储着色结果,color[i]的值为区域i所着颜色。
【C程序】

#include <stdio.h>
#define  N 10
void output(int color[]){    /*输出一种着色方案*/
int i ;
for ( i = 0 ; i < N ; i++ )
printf( "%4d",color[i] ) ;
printf("\n") ;
}
int back(int *ip,int color[ ]){    /*回溯*/
int c = 4 ;
while ( c == 4 ){
if ( *ip <= 0 )
return 0 ;
--(*ip) ;
c = __(1)__ ;
color[*ip] = -1 ;
}
return c ;
}
/*检查区域 i ,对 c 种颜色的可用性*/
int colorOK(int I,int c,int[][N],int color[ ]){
int j ;
for ( j = 0 ; j < i ; j++ )
if ( __(2)__ )
return 0 ;
return 1 ;
}
/*为区域i选一种可着的颜色*/
int select(int I,int c,int adj[][N],int color[ ]){
int k ;
for(k = c ; k <= 4 ; k++ )
if( colorOK( __(3)__ ))
return k ;
return 0 ;
}
int coloring(int adj[][N]){    /*寻找各种着色方案*/
int color[N],I,c,cnt ;
for(i = 0 ; i < N ; i++)
color[i] = -1 ;
i = c = 0 ;
cnt = 0 ;
while(1){
if((c = __(4)__ ) == 0){
c = back( &I,color);
if ( c == 0)
return cnt;
}
else {
__(5)__ ;
i++ ;
if(i == N){
output(color) ;
++cnt ;
c = back( &I,color ) ;
}
e1se c = 0 ;
}
}
}
void main(){
int adj[N][N] =
{ {0,1,0,1,1,1,1,1,1,1},
{1,0,1,1,0,1,1,1,1,0},
{0,1,0,1,0,1,1,0,1,1},
{1,1,1,0,1,1,0,0,1,1},
{1,0,0,1,0,1,0,0,0,0},
{1,1,1,1,1,0,1,0,0,1},
{1,1,1,0,0,1,0,0,1,0},
{1,1,0,0,0,0,0,0,1,1},
{1,1,1,1,0,0,1,1,0,1},
{1,0,1,1,0,1,0,1,1,0}
} ;
printf("共有%d组解.\n",coloring(adj));
}

 

进入优易学网论坛看答案

【字体: 】【收藏本页】【打印本文】【告诉好友 】【投稿邮箱