• 大小: 2.28MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-13
  • 语言: 其他
  • 标签: 地图着色  

资源简介

两种方法,第一种递归回溯法,第二种是贪心法。 已知中国地图,请设计地图着色软件,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色最少。

资源截图

代码片段和文件信息

#include 
#include 
#include
#define Max 50
using namespace std;

class Graph  //图的类
{
public:
int n;//顶点
int e;//边
    string vex[Max];  //顶点信息
int Edge[Max][Max];//顶点与顶点之间的联系
Graph(int n0int e0){n=n0;e=e0;}//构造函数
void Input();  //图的输入
int IsEdge(int v1int v2);//判断v1v2之间是否有边
int check(string a);
};

class color_greedy;
class subset  //子集类
{
public:
friend class color_greedy; //char-greedy是其友元类
int *newclr;//指向子集所包含的各个结点序号
int n;    //子集中结点个数
int color;//该子集所赋给的颜色值

subset(int newcolor=0int m=Max);//构造函数
~subset(){delete newclr;}//析构函数
};

class color_greedy
{
public:
Graph g;//要着色的图
subset *u;//子集集合
int *x; //各结点的着色值向量
int n ;  //图的结点个数
int m ; //可选的m 种颜色
color_greedy(int n0int m0int e0);//构造函数
~color_greedy(){delete x; delete []u;}//析构函数
void greedy(subset &y );//贪心法找子集y中包含的结点
void Coloring ();//产生图的着色方案
};
/*************************Graph.cpp*****************/
int Graph::check(string a)
{
for(int i=0;i if(vex[i]==a)
return i;
return -1;
}
void Graph::Input()   //地图的输入
{
ifstream fin(“ChinaMapColoring.txt“);
if(!fin)
{
cerr<<“文件打开失败“;
exit(1);
}
cout< system(“pause“);
system(“cls“);
cout<<“中国地图共有有23个省、5个自治区、4个直辖市、2个特别行政区.........“< for(int i=0;i fin>>vex[i];
cout<<“这些省份分别是:“< for(i=0;i {
cout< if((i+1)%7==0)
cout< }
cout< system(“pause“);
system(“cls“);
cout< system(“pause“);
system(“cls“);
int pq;
string ab;
for(i=0;i for(int j=0;j Edge[i][j]=0;

cout< cout<<“这些相邻关系分别为:“<
for(i=0;i {
fin>>a;
fin>>b;
p=check(a);
q=check(b);
Edge[p][q]=Edge[q][p]=1;//矩阵存储
cout< if((i+1)%3==0)
cout< }
cout< fin.close();
}
int Graph::IsEdge(int v1int v2)
{
if(Edge[v1][v2]>0)
return 1;
else return 0;
}

/*******************************subset.cpp***********************/
subset::subset(int newcolorint m)
{
n=m;
if(n>0)
newclr=new int[n];
else 
newclr=0;
color=newcolor;
}

/*****************************color_greedy.cpp********************/
color_greedy::color_greedy(int n0int m0int e0):g(n0e0)
{
n=n0;
m=m0;
x=new int[n];//创建x 向量
for(int i=0;i x[i]=0;//初始化向量x
u=new subset[m];//创建m个子集
g.Input();
}
void color_greedy::greedy(subset &y)
{
int vp=0q=1w;
for(int i=0;i if(x[i]==0)
{
v=i;
break;
}
y.newclr[0]=v;//将结点v加入新的颜色值子集
x[v]=y.color;//将结点v赋给新的颜色值
for(i=0;i {
if(x[i]==0)
{
v=i;//找图中未着色的结点v
p=q-1;//q为当前子集中包含的结点个数
while(p>=0)
{
w=y.newclr[p];//取子集中一个结点w
if(g.IsEdge(vw))break;//若v和w邻接,则v不能赋给该新颜色值
els

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2011-03-28 13:56  地图着色\
     目录           0  2011-03-28 13:56  地图着色\贪心法\
     文件         908  2010-09-14 20:29  地图着色\贪心法\ChinaMapColoring.txt
     目录           0  2011-03-28 13:56  地图着色\贪心法\Debug\
     文件       91136  2010-09-16 14:17  地图着色\贪心法\Debug\vc60.idb
     文件      110592  2010-09-16 14:17  地图着色\贪心法\Debug\vc60.pdb
     文件      577619  2010-09-16 14:17  地图着色\贪心法\Debug\图着色初做.exe
     文件      829116  2010-09-16 14:17  地图着色\贪心法\Debug\图着色初做.ilk
     文件      297525  2010-09-16 14:17  地图着色\贪心法\Debug\图着色初做.obj
     文件     2165364  2010-09-15 19:30  地图着色\贪心法\Debug\图着色初做.pch
     文件     1156096  2010-09-16 14:17  地图着色\贪心法\Debug\图着色初做.pdb
     文件        4539  2010-09-16 14:17  地图着色\贪心法\图着色初做.cpp
     文件        3451  2010-09-16 14:17  地图着色\贪心法\图着色初做.dsp
     文件         545  2010-09-16 14:18  地图着色\贪心法\图着色初做.dsw
     文件       50176  2010-09-16 14:18  地图着色\贪心法\图着色初做.ncb
     文件       48640  2010-09-16 14:18  地图着色\贪心法\图着色初做.opt
     文件         766  2010-09-16 14:17  地图着色\贪心法\图着色初做.plg
     目录           0  2011-03-28 13:56  地图着色\递归回溯法\
     文件         908  2010-09-14 20:29  地图着色\递归回溯法\ChinaMapColoring.txt
     目录           0  2011-03-28 13:56  地图着色\递归回溯法\Debug\
     文件       82944  2010-09-17 19:59  地图着色\递归回溯法\Debug\vc60.idb
     文件      118784  2010-09-15 22:38  地图着色\递归回溯法\Debug\vc60.pdb
     文件      577623  2010-09-17 19:59  地图着色\递归回溯法\Debug\图着色初做.exe
     文件      828436  2010-09-17 19:59  地图着色\递归回溯法\Debug\图着色初做.ilk
     文件      294612  2010-09-17 19:59  地图着色\递归回溯法\Debug\图着色初做.obj
     文件     2165364  2010-09-15 19:26  地图着色\递归回溯法\Debug\图着色初做.pch
     文件     1156096  2010-09-15 22:38  地图着色\递归回溯法\Debug\图着色初做.pdb
     文件        3633  2010-09-15 22:24  地图着色\递归回溯法\图着色初做.cpp
     文件        3451  2010-09-17 19:59  地图着色\递归回溯法\图着色初做.dsp
     文件         545  2010-09-17 20:08  地图着色\递归回溯法\图着色初做.dsw
     文件       41984  2010-09-17 20:08  地图着色\递归回溯法\图着色初做.ncb
............此处省略2个文件信息

评论

共有 条评论