33,311
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#define N 21
void color(int metro[N][N], int r_color[N],int sum)
{
int i,j,k;
for(i=0; i<sum; i++)
{
for(j=1; j<5; j++)
{
r_color[i]=j; /*尝试着色*/
for(k=0; k<i; k++)
{
if((metro[i][k]==1) && (r_color[k]==r_color[i]))
break;
}
if(k>=i) break;
}
}
}
void main()
{
int r_color[N]={0};
int i;
int metro[N][N]={ {1},
{0,1,1,1,1,1,1},
{0,1,1,1,1},
{0,1,1,1,0,0,1},
{0,1,1,0,1,1},
{0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1},
{0,1,0,1,0,1,1,1,1,1},
{0,0,0,0,0,0,1,1,1},
{0,0,0,0,0,0,1,1,1,1,0,0,1},
{0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,0,1},
{0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1},
{0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,1},
{0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1},
{0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1},
{0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,1,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1},
{0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,1,1},
{0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1}};
color(metro,r_color,N);
printf("\n");
for(i=0;i<N;i++)/*输出着色方案*/
printf("the r_color[%d] is %d\n",i,r_color[i]);//每个节点的颜色
}