
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