邻接矩阵图最优着色问题

yangboufo 2009-11-28 01:11:04
能帮我写个深度优先搜索求最少颜色问题的代码吗?邻接矩阵已经创建
深度搜索代码如下,能否请高人改成求最优着色问题的代码(相邻两点不能同色的最少着色方案,用channel输出)
#include<iostream>
#include<string>
using namespace std;
bool visit[26];
int channel=0;
void DFS(int r[][26],int a)
{
visit[a]=true;
channel++;
for(int i=0;i<26;i++)//对该结点尚未访问的邻接结点递归调用DFS函数
{
if((visit[i]==false)&&(r[a][i]==1))
{
DFS(r,i);
}
}

}
int main()
{
int num;
while((cin>>num)&&(num!=0))
{
int tnum=num;
int r[26][26]={-1};
int row,col;
for(row=0;row<num;row++)
{
for(col=0;col<num;col++)
{
r[row][col]=0;
}
}//根据输入的num值初始化num阶数组
row=0;
col=0;
while(num>0)
{
string str;
cin>>str;
int i=0;
for(i=2;i<str.length();i++)
{
col=str[i]-65;
r[row][col]=1;
}
row++;
num--;
}//生成深度优先搜索的矩阵
for(int i=0;i<tnum;i++)
{
visit[i]=false;
}
for(int j=0;j<tnum;j++)
{
if((visit[j]==false))//对尚未访问过的结点调用DFS函数
{
DFS(r,j);
}
}
cout<<channel;
channel=0;
}


return 0;
}
...全文
370 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyjkchen 2009-11-28
  • 打赏
  • 举报
回复
路过。
cattycat 2009-11-28
  • 打赏
  • 举报
回复
忘了说了,图着色的最小色数问题是NP-完全问题。
cattycat 2009-11-28
  • 打赏
  • 举报
回复
DFS的效率并不好,需要回溯,贪心算法还算比较高效的了,缺点是不能保证最优解,也就是求出来的不一定是最小色数,是近似最优解,有的时候等于最优解,有的时候稍微大于最优解。
cattycat 2009-11-28
  • 打赏
  • 举报
回复
给你写一个贪心算法实现的最小色数图着色算法吧


int GColor(int E[n+1][n+1])//顶点编号和下标对应,从1开始
{
int i,j,k=1;
int color[n+1];//每个顶点的着色情况
color[1]=1;
for(i=2;i<=n;i++)
color[i]=0;
do{
for(i=2;i<=n;i++){
if(color[i]>0)continue;
for(j=1;j<i;j++)
if((color[j]==k)&&E[i][j])
break; //E[i][j]表示边<i,j>相邻
if(j==i)color[i]=k;
}
j=2;
while((color[j]>0)&&(j<=n))j++;
k++; //对所有不相邻的节点着色后,色数加1
}while(j<=n)
return k-1;
}

yangboufo 2009-11-28
  • 打赏
  • 举报
回复
急,在线等高人
herman~~ 2009-11-28
  • 打赏
  • 举报
回复
不懂 帮up

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧