万能百科  > 所属分类  > 

请阅读以下技术说明和C代码,将程序段中(1)~(5)空缺处的语句填写完整。 【说明】 著名的四色定理指出

请阅读以下技术说明和C代码,将程序段中(1)~(5)空缺处的语句填写完整。

【说明】

著名的四色定理指出任何平面区域图均可用4种颜色着色,使相邻区域着不同的颜色。以下C程序对给定的区域图找出所有可能的不超过4种颜色的着色方案。该程序中用1~4分别表示4种颜色。要着色的N个区域用0~-1编号,区域相邻关系用adj[][]矩阵表示,矩阵的i行j列的元素为1,表示区域i与区域了相邻;矩阵的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[] ) { /*回溯*/

intc = 4 ;

while ( c == 4 ) {

if ( *ip <= 0 )

return 0 ;

-- (*ip) ;

c =(1);

color[*ip] =-1 ;

}

return c ;

}

/*检查区域i,对c种颜色的可用性*/

int colorOk(int i , intc , 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 ) ;

}

else 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));

}

正确答案:

(1)color[*ip](2)adj[i][j]!=0 && color[j]==c(3)Ikadjcolor(4)select(Ic+1adjcolor)(5)color[i]=c(1)color[*ip](2)adj[i][j]!=0 && color[j]==c(3)I,k,adj,color(4)select(I,c+1,adj,color)(5)color[i]=c 解析:这是一道要求考生用C语言解决着色问题的编程题。本题的解答思路如下。 认真阅读程序说明部分和

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。

标签