zoukankan      html  css  js  c++  java
  • 编程之美:1.9高效率安排见面会 图的m着色问题 回溯法

    原书问题,可以转换为图的m着色问题 ,下面该问题的代码

     这里有参考ppt与code,免积分载

    http://download.csdn.net/detail/u011467621/6341195

    // 1.9.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include "iostream"
    #include "stdio.h"
    
    using namespace std;
    
    bool ColoringGraph(int G[][5],int n,int m);
    bool IsOk(int G[][5],int color[],int k,int n) ;
    int G[5][5]={{0,1,1,0,0},{1,0,1,1,1},{1,1,0,0,1},{0,1,0,0,1},{0,1,1,1,0}};
    int _tmain(int argc, _TCHAR* argv[])
    {
        int n=5,m=3;
        ColoringGraph(G,n,m);
        return 0;
    }
    
    bool ColoringGraph(int G[][5],int n,int m)
        //n是图的定点个数,G是图的连接矩阵,Gij=1说明i定点与j定点有连接。m是最多可以上的色
        //若输出有效上色,返回1,否则返回0
    {
        int *color=new int[n];
        
        for(int i=0;i<n;i++)//给每个顶点颜色初始化为0
            color[i]=0;
    
        int k=0;
    
        while(k>=0)//k代表顶点个数,当k回溯到0说明已经没有可行解了
        {
            while(color[k]<=m)
            {
                color[k]++;
                
                if (IsOk(G,color,k,n))
                    break;
    
            }
            if(color[k]<=m && k==n-1)
            {
                cout<<"OK";
                for(int j=0;j<n;j++)
                    cout<<color[j];
                return 1;
            }
            else if(color[k]<=m && k<n-1)
            {
                k++;
            }
            else//若k>m,说明此路不同回溯到上一层
            {
                
                color[k]=0;
                k--;
            }
            
            
    
        }
    
        return 0;
    }
    
    
    bool IsOk(int G[][5],int color[],int k,int n)  //判断是否有相同色的顶点,与之是一个边的
    {
        for(int i=0;i<n;i++)
        {
            if(G[i][k]==1 && color[i]==color[k])
                return false;
        }
        return true;
    }

     参考文献:

    http://wenku.baidu.com/view/d7242fd1c1c708a1284a444d.html

    欢迎拍砖,交流。感谢您的阅读,若您想支持一下本文,麻烦顶一下,您的鼓励,是我的动力,谢谢!- -
    欢迎转载本文,

    转载时请附上本文地址:http://www.cnblogs.com/Dzhouqi/p/3346466.html
    另外:欢迎访问我的博客 http://www.cnblogs.com/Dzhouqi/

  • 相关阅读:
    用react的ReactCSSTransitionGroup插件实现简单的弹幕动画
    composer安装yii2问题总结
    记阿里笔试经历
    JVM, JRE,JDK 的区别
    HTML
    Http协议
    操作系统和网络基础知识
    网络基础之网络协议
    计算机硬件知识
    计算机硬件历史
  • 原文地址:https://www.cnblogs.com/Dzhouqi/p/3346466.html
Copyright © 2011-2022 走看看