国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
最小支撐樹的prim算法(反圈法)c++實(shí)現(xiàn)

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

 

#define INFINITY 1000

#define max_name 50

#define max_vertex_num 50

 

typedef char vertex[max_name];//頂點(diǎn)名字串

typedef int adjMatrix[max_vertex_num][max_vertex_num];//鄰接距陣

 

 

 

typedef struct 

{vertex adjvex; //鄰接矩陣

 int lowcost;    //權(quán)值

}close[max_vertex_num];//定義一個(gè)結(jié)構(gòu)以便在后面closedge 使用

 

typedef struct//定義圖

{

 vertex vexs[max_vertex_num]; //頂點(diǎn)集

 adjMatrix arcs; //

 int vexnum,arcnum;//點(diǎn)個(gè)數(shù),邊個(gè)數(shù)

}MGraph;

 

 

int LocateVex(MGraph G,vertex u)//G中存在頂點(diǎn)u,則返回該點(diǎn)在圖中位置;否則返回其他信息;

{

  int i;

  for(i=0;i<G.vexnum;++i)

  if(strcmp(u,G.vexs[i])==0)

  return i;

  return 1;

}

 

void CreateGraph(MGraph &G)

{

  int i,j,k,w;

  vertex v1,v2;

  printf("輸入無向圖頂點(diǎn)數(shù)和邊數(shù):  \n");

  scanf("%d  %d",&G.vexnum,&G.arcnum);

  printf("輸入各頂點(diǎn)的值:\n", G.vexnum);

  for(i=0;i<G.vexnum;++i) //構(gòu)造頂點(diǎn)集

    scanf("%s",&G.vexs[i]);

    for(i=0;i<G.vexnum;++i) //初始化鄰接方陣

       for(j=0;j<G.vexnum;++j)

                                                       G.arcs[i][j]=INFINITY;

  printf("輸入一條邊依附的頂點(diǎn)及權(quán)值: \n",G.arcnum);//輸入一條邊依附的頂點(diǎn)及權(quán)值

  for(k=0;k<G.arcnum;++k)

  {

    scanf("%s%s%d",v1,v2,&w);

    i=LocateVex(G,v1);//v1在圖中位置

    j=LocateVex(G,v2);//v2在圖中位置

    G.arcs[i][j]=G.arcs[j][i]=w; //置于對(duì)稱弧

  }

}

 

int minimum(close c,MGraph G)//求出下一個(gè)節(jié)點(diǎn) k個(gè)頂點(diǎn)

{

  int i=0,j,k,min;

 

  min=INFINITY;

 

  //初始化

  k=-1;

  for(j=0;j<=G.vexnum;j++)//求最小

   if(c[j].lowcost<min&&c[j].lowcost>0)

    {

      min=c[j].lowcost;

      k=j;

    }

  return k;

}

 

 

void PRIM(MGraph G,vertex u)

{

  int i,j,k=0;

  close closedge;//一個(gè)結(jié)構(gòu)

  bool isbreak=false;

  k=LocateVex(G,u);//u在圖中位置 返回G.vexs[i]中下標(biāo)

  for(j=0;j<=G.vexnum;++j) //輔助數(shù)組初始化 closedgeO 開始

  {  

                                                    if(j!=k)//沒有自己到自己的

                                                     closedge[k].lowcost=0;

                                                     strcpy(closedge[j].adjvex,u);

       closedge[j].lowcost=G.arcs[k][j];//

  }

  int flag[1000];

  flag[0]=0;

  int count=1;

  for(i=1;i<G.vexnum;++i)

  {

    k=minimum(closedge,G);

                                                  if(k==-1)

                                                  {

                                                    isbreak=true;

                                                    break;

                                                  }

printf("%s-%s%d\n",closedge[k].adjvex,G.vexs[k],G.arcs[k][LocateVex(G,closedge[k].adjvex)]); //輸出生成樹的邊

    closedge[k].lowcost=0; // k個(gè)頂點(diǎn)并入U

                                                  flag[count]=k;

                                                  count++;

    for(j=0;j<G.vexnum;++j)

      if(G.arcs[k][j]<closedge[j].lowcost)//新頂點(diǎn)并入U后重新選擇最小邊

      {

        strcpy(closedge[j].adjvex,G.vexs[k]);

        closedge[j].lowcost=G.arcs[k][j];

      }

  }

  if(isbreak)

  {

printf("此圖不連通,無最小支撐樹 !\n訪問過的點(diǎn)為:\n");

for(i=0;i<count;i++)

{

 printf("%s  ",G.vexs[flag[i]]);

}

printf("\n");

  }

}

 

void main()

{

  MGraph G;

  CreateGraph(G);

  printf("最小生成樹的各條邊為: \n");

  PRIM(G,G.vexs[0]);

 }
 

此處給出1個(gè)賦權(quán)圖, prim算法找出賦權(quán)圖上的最小樹.

 

1111s1s

33

2

5

4

6

5

6

5

2

4

4

1

7

3

1

1.

7

1

1結(jié)果如下:

 注釋 :1中有7個(gè)點(diǎn)10條邊, 最后結(jié)果輸出最小生成樹為:

 

1111s1s

33

2

5

4

6

 

6

5

2

4

 

1

 

3

1

1.

7

1

    1最小權(quán)值W=5+1+2+3+4+1= 16

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
最小生成樹
第19講n
C語言圖的創(chuàng)建
基于鄰結(jié)矩陣的圖的BFS和DFS遍歷
【算法復(fù)習(xí)二】傳統(tǒng)基本算法(貪心、動(dòng)態(tài)規(guī)劃、回溯和分支限界)
圖的深度遍歷
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服