论文网
English Papers
万事OK网
发表论文
 
 首页 > IT文章 > 程序设计 >
地图着色算法C语言实现

[科技论文网] http://www.scipapers.com    2007-12-01  

    地图着色算法C语言实现

    定理:任何平面地图可以使用4种颜色给每个不同的城市着色,而保证相邻的城市着不同的颜色。
           思路:把地图上的每个城市抽象为一个点,并给每个城市编号,,相邻的城市之间用直线连接。据此做出邻接矩阵,若第i个城市与第j个城市相邻,则metro[i][j]=1,否则metro[i][j]=0。
           算法:按照编号从小到大的顺序检查每个城市,对每个城市从1到4使用4种颜色着色,若当前颜色可用(即不与相邻城市颜色相同),则着色;否则测试下一种颜色。
           程序:
    #i nclude <stdio.h>
    #define N 21

    int ok(int metro[N][N],int r_color[N],int current)
    {/*测试当前着色方案是否可行*/
       int j;
       for(j=1;j<current;j++)
         if(metro[current][j]==1&&r_color[j]==r_color[current])
              return 0;/*城市相邻且颜色相同*/
       return 1;
    }

    void go(int metro[N][N],int r_color[N],int sum,int current)
    {
       int i;
       if(current<=sum)/*检查所有城市*/
          for(i=1;i<=4;i++)/*测试每种颜色*/
          {
                r_color[current]=i;/*尝试着色*/
                if(ok(metro,r_color,current))/*若尝试成功*/
               {
                     go(metro,r_color,sum,current+1);/*检查下一个城市*/
                     return;
              }
          }
    }

    void main()
    {
       int r_color[N]={0};
       int i;
       int metro[N][N]={{0},/*邻接矩阵*/
                                {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}};
       go(metro,r_color,20,1);
       printf("\n");
       for(i=1;i<=20;i++)/*输出着色方案*/
         printf("%3d",r_color[i]);
    }

          中午吃饭时,想了一下,把上面程序中的go函数和ok函数合并一下,并且不使用递归,于是写下了下面color函数的代码,main函数不变,但调用方式变为color(metro,r_color,20);请朋友多批评

    void color(int metro[N][N],int r_color[N],int sum)
    {
       int i,j,k;
       for(i=1;i<=sum;i++)/*检查所有城市*/
         for(j=1;j<=4;j++)/*对每个城市尝试4种颜色的着色方案*/
         {
            r_color[i]=j;/*尝试着色*/
            for(k=1;k<i;k++)/*检查是否与相邻城市颜色相同*/
                if(metro[i][k]==1&&r_color[k]==r_color[i])
                   break;/*相同则跳出,此时有k<i,则下面条件不成立,继续尝试下一种颜色*/
            if(k>=i)/*若不相同,则使用当前颜色,并检查下一个城市*/
                break;
         }
    }

        来源:

声明:本文由网友推荐或作者提交,版权归原作者所有,刊登此文仅为传播知识,展示研究成果,提高文章引用率。未经原作者授权,禁止用于任何形式的商业行为。科技论文网倡导尊重知识、尊重劳动、保护原创、知识共享。由于部分论文文章来于网络,文章作者不祥,请相关的原创作者与我们联系,以便加上您的署名。

  
地图着色算法C语言实现
下面没有链接了     链式实现的堆栈
最新论文
·[程序设计]地图着色算法C语言实现
·[程序设计]链式实现的堆栈
·[程序设计]简单的遗传算法源代码
·[程序设计] 红黑树源代码
·[程序设计]二叉搜索树BSTree源码
·[程序设计]画直线算法
·[程序设计]从一道笔试题谈算法优化
·[程序设计]希尔排序源代码
·[程序设计]Dijkstra算法完整实现源代码
·[程序设计]二叉树删除以及DSW算法C源代码
 
 

搜索论文

Google
论文分类

论文网 论文发表网 论文 免费论文网 找论文网 毕业论文 中国论文网 英语论文 百度论文 聘教网 易搜
 免费发布论文    中国论文网 2008版权所有  业务联系:pinjiao@126.com