标签:col ++ stdio.h printf i++ turn track 问题 cpp
#include<stdio.h> int color[100],sum; bool ok(int k,int c[100][100]) { for(int i=1;i<k;i++) if((c[k][i]==1)&&(color[i]==color[k])) return false; return true; } void backtrack(int k,int n,int m,int c[100][100]){ if(k>n){ for(int i=1;i<=n;i++) printf("%d ",color[i]); printf("\n"); sum++; } else{ for(int i=1;i<=m;i++){ color[k]=i; if(ok(k,c)) backtrack(k+1,n,m,c); color[k]=0; } } } int main(){ int i,j,n,m; int c[100][100]; 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"); backtrack(1,n,m,c); printf("着色可能解的总数为:%d\n",sum); return 0; }
标签:col ++ stdio.h printf i++ turn track 问题 cpp
原文地址:https://www.cnblogs.com/zili/p/9906509.html