bool flag = true;
bool vis[501];
int color[501] = {0};
int n,e,k;
MGraph g;
int main()
{
输入n,e,k为节点数、边数和颜色数
建图
输入 m
for(i=0 to i<m){
定义一个set容器s
for(j=0 to j<n){
输入颜色并保存在s
同时保存在color[j]
}
如果s里面的颜色数不等于k flag=false
否则{
将vis数组赋值为false
for(r=0 to r<n)
isYes(g,r);
如果flag==false break
}
}
如果flag==true 输出Yes
否则 输出No
}
void isYes(MGraph &g,int i) {
如果(vis[i]==false或者flag == false) 结束
令vis[i] = true;
for (int j = 0 to j < g.n) {
如果(color[i] == color[j] && g.edges[i][j] == 1) {
flag = false;
}
如果(g.edges[i][j] == 1 && vis[j] == false){
isYes(g,j);
}
}
}
主要函数
int BFS(AdjGraph *G,int v)
{
定义一个指针p
int queue[MAXV],front=0,rear=0,flag1,flag2;//queue为队列操作
int w,i,num=0,count=1;
visited[v]=1;
rear=(rear+1)%MAXV;
将v入队列
flag1=v保存v
while(front!=rear)
{
取队头元素w
p=G->adjlist[w].firstarc;
当p不等于NULL
如果 visited[p->adjvex]==0
visited[p->adjvex]=1;
令队尾元素等于p->adjvex
count++;
flag2保存p->adjvex
p指向下一条边
如果w等于flag1
num++;
flag1=flag2
当num等于6时 返回count
}
}
主要函数
void Prim(int v)
{
令全局变量count=0
定义lowcost[1005]保存最短路径
将lowcost赋值为0
将节点v到各节点的距离保存在lowcost
for(i=1 to i<n){
min=INF;
找出lowcoat最小值min 保存下标于k
如果最小值不存在 输出Impossible
count+=min;
lowcost[k]=0;
for(j=1 to j<n){
如果g[k][j]!=0&&g[k][j]<lowcost[j]
lowcost[j]=g[k][j];
}
}
}
#include
#include
typedef char vextape[20];
typedef struct {
int avex,bvex;
float w;
}edge;
typedef struct{
int vexnum,edgenum;
edge mst[20];
vextape vexs[20];
float arcs[30][30];
}graphmatrix;
int locatevex(graphmatrix *g,vextape u){
int i;
for(i=0;ivexnum;i++){
if(strcmp(u,g->vexs[i])==0)
return i;
}
return 0;
}
void graphinit(graphmatrix *g){
int i,j,t;
float w;
vextape va,vb;
FILE *p;
p=fopen("graph.txt","r");
fscanf(p,"%d",&g->vexnum);
fscanf(p,"%d",&g->edgenum);
for(i=0;ivexnum;i++)
for(j=0;j<=i;j++)
{
g->arcs[i][j]=g->arcs[j][i]=32767;
}
for(i=0;ivexnum;i++){
fscanf(p,"%s",g->vexs[i]);
}
for(t=0;tedgenum;t++){
fscanf(p,"%s%s%f",va,vb,&w);
i=locatevex(g,va);
j=locatevex(g,vb);
g->arcs[i][j]=g->arcs[j][i]=w;
}
fclose(p);
}
void prim(graphmatrix *g){
int i,j,min;
int vx,vy;
float weight,minw;
edge e;
for(i=0;ivexnum-1;i++){
g->mst[i].avex=0;
g->mst[i].bvex=i+1;
g->mst[i].w=g->arcs[0][i+1];
}
for(i=0;ivexnum-1;i++){
minw=32767;
min=i;
for(j=i;jvexnum-1;j++){
if(g->mst[j].wmst[j].w;
min=j;
}
}
e=g->mst[min];
g->mst[min]=g->mst[i];
g->mst[i]=e;
vx=g->mst[i].bvex;
for(j=i+1;jvexnum-1;j++){
vy=g->mst[j].bvex;
weight=g->arcs[vx][vy];
if(weightmst[j].w){
g->mst[j].w=weight;
g->mst[j].avex=vx;
}
}
}
}
int main(){
int i;
float t=0;
graphmatrix gr;
graphinit(&gr);
prim(&gr);
printf("\n应该建设以下地铁线路:\n");
for(i=0;i %s, %.2f km\n",gr.vexs[gr.mst[i].avex],gr.vexs[gr.mst[i].bvex],gr.mst[i].w);
t+=gr.mst[i].w;
}
printf("\n总线路长为%f公里\n",t);
return 0;
}
原文:https://www.cnblogs.com/mayifang/p/9192844.html