图着色

来源:互联网 发布:淘宝客高佣金90 被骗 编辑:程序博客网 时间:2024/05/03 04:09
#include<stdio.h>int color[100];int c[100][100];//存储n个顶点的无向图的数组int colok(int k )//判断顶点k的着色是否发生冲突{    int i,j;    for(i=1;i<k;i++)        if(c[k][i]==1&&color[i]==color[k])            return 0;        return 1;}void graphcolor(int n,int m){    int i,k;    for(i=1;i<=n;i++)        color[i]=0;//初始化    k=1;    while(k>=1)    {        color[k]=color[k]+1;        while(color[k]<=m)            if (colok(k)) break;            else color[k]=color[k]+1;//搜索下一个颜色        if(color[k]<=m&&k==n)//求解完毕,输出解            {                for(i=1;i<=n;i++)                    printf("%d ",color[i]);                printf("\n");                //return;//return表示之求解其中一种解            }            else if(color[k]<=m&&k<n)                k=k+1;    //处理下一个顶点            else            {                color[k]=0;                k=k-1;//回溯            }    }}void main(){    int i,j,n,m;    printf("输入顶点数n和着色数m:\n");    scanf("%d %d",&n,&m);    printf("输入无向图的邻接矩阵:\n");    for(i=1;i<=n;i++)        for(j=1;j<=n;j++)            scanf("%d",&c[i][j]);    printf("着色所有可能的解:\n");    graphcolor(n,m);}
0 0