亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 4-8.c

?? 一本經典書籍--C程序員成長攻略的原代碼
?? C
字號:
#include"stdio.h"
#include"graphics.h"
#define INFINITY 32767
#define MAX_VERTEX_NUM 20  /*最大頂點數*/

typedef struct ArcCell
{  /*定義鄰接矩陣*/
    int adj;
    char *info;
}AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];  

typedef struct VertexCell
{   
    /*定義頂點結構*/
    char v;     /*頂點值*/
    int x,y;    /*頂點在屏幕中的坐標*/
    int flag;   /*標識該頂點是否已在生成樹中*/
}Vertex;    

typedef struct MatrixGraph
{  
    /*定義圖結構*/
    Vertex vex[MAX_VERTEX_NUM];  /*圖的頂點結構數組*/
    AdjMatrix arcs;                   /*圖的鄰接矩陣*/
    int vexnum,arcnum;                /*圖的實際頂點數和弧數*/   
}MGraph;

struct
{     
    /*定義當前尚未包含到最小生成樹中的頂點的輔助結構*/        
    int lowcost;   /*該頂點當前到達最小生成樹的最小代價*/
    int adj;       /*該頂點當前通過與最小生成樹中的頂點adj相連而具有最小代價*/
}NoInTreeVex[MAX_VERTEX_NUM];

typedef struct
{   
    /*定義最小生成樹中的弧結構,用于存放最小生成樹的弧*/
    char v1,v2;    /*弧兩端的頂點*/ 
    int cost;      /*弧的代價*/
}PrimTreeArc;

struct 
{   
    /*定義最小生成樹結構,用于存放最后生成的最小生成樹*/
    PrimTreeArc arc[MAX_VERTEX_NUM];  /*最小生成數的弧*/
    char v[MAX_VERTEX_NUM];           /*最小生成樹的頂點*/
}PrimTree;

/*創建指定圖*/
void CreateAppMGraph(MGraph *G)
{
    int i,j;
    int VerXY[][2]={{300,100},{230,150},{300,200},{370,150},{240,250},{360,250}}; 
    /*VerXY[][2]存放事先指定的圖的各頂點的坐標*/
    G->vexnum=6;   /*指定圖的頂點數*/ 
    G->arcnum=10;  /*指定圖的弧數*/
    for(i=0;i<G->vexnum;i++)
	{
        G->vex[i].v='A'+i;  /*初始化各頂點的值,依次為A至F*/
        G->vex[i].flag=0;   /*各頂點初始時均未包含在最小生成樹中*/
	}
    /*以下為創建指定圖的鄰接矩陣*/
    for(i=0;i<G->arcnum;i++)
      for(j=0;j<G->vexnum;j++)
	    G->arcs[i][j].adj=INFINITY;  
    for(i=0;i<G->vexnum;i++)
    {
		G->vex[i].x=VerXY[i][0];
        G->vex[i].y=VerXY[i][1];
	}
    G->arcs[0][1].adj=G->arcs[1][0].adj=6;
    G->arcs[0][2].adj=G->arcs[2][0].adj=1;
    G->arcs[0][3].adj=G->arcs[3][0].adj=5;
    G->arcs[1][2].adj=G->arcs[2][1].adj=5;
    G->arcs[1][4].adj=G->arcs[4][1].adj=3;
    G->arcs[2][3].adj=G->arcs[3][2].adj=5;
    G->arcs[2][4].adj=G->arcs[4][2].adj=6;
    G->arcs[2][5].adj=G->arcs[5][2].adj=4;
    G->arcs[3][5].adj=G->arcs[5][3].adj=2;
    G->arcs[4][5].adj=G->arcs[5][4].adj=6;
}

/*返回頂點v在圖中的位置,也就是在頂點數組中的下標*/
int FindVex(MGraph *G,char v)  
{
    int i;
    for(i=0;i<G->vexnum;i++)
        if(G->vex[i].v==v)
	return i;
}

/*畫頂點*/
void DrawVex(Vertex vex)
{
    int VexR=15;
    char str[2];
    setfillstyle(1,RED);
    fillellipse(vex.x,vex.y,VexR,VexR);
    sprintf(str,"%c",vex.v);
    moveto(vex.x-2,vex.y-2);
    settextstyle(0,0,0);
    outtext(str);
}

/*畫弧*/
void DrawArc(Vertex vex1,Vertex vex2,int cost)
{
    char str[2];
    setcolor(WHITE);
    line(vex1.x,vex1.y,vex2.x,vex2.y);
    sprintf(str,"%d",cost);
    settextstyle(0,0,2);
    outtextxy((vex1.x+vex2.x)/2,(vex1.y+vex2.y)/2,str);
}

/*顯示整個圖*/
void ShowGraph(MGraph *G)
{
    int i,j,x,y;
    int VexR=15;
    char *str;
    setcolor(WHITE);
    for(i=0;i<G->vexnum;i++)
      for(j=i+1;j<G->vexnum;j++)
      {
	      if(G->arcs[i][j].adj!=INFINITY) /*只當相鄰時才畫弧,INFINITY表示不相鄰*/
	          DrawArc(G->vex[i],G->vex[j],G->arcs[i][j].adj);
      }
    for(i=0;i<G->vexnum;i++)
        DrawVex(G->vex[i]);
}

/*找到當前具有最小代價的尚未包含在最小生成樹中的頂點*/
int FindLowcostVex(MGraph *G)
{
    int i,j,min;
    min=INFINITY;
    for(i=0;i<G->vexnum;i++)
	{
        if(!G->vex[i].flag && NoInTreeVex[i].lowcost<min)
		{  /*如果頂點i尚未包含在最小生成樹中,且其當前到達最小生成樹的代價小于最小代價*/
	        min=NoInTreeVex[i].lowcost;  /*則取頂點i的代價為最小代價*/
	        j=i;   /*保留頂點i的位置i*/
		}
	}
    return j;   /*返回具有到達最小生成樹的最小代價的頂點位置*/
}

/*執行普里姆算法,求得最小生成樹*/
void Prim(MGraph *G,char v)  
{
    /*參數v為求最小生成樹的開始頂點*/
    int i,j,k;
    int min;

    k=FindVex(G,v);  /*找到開始頂點在圖中的位置(即頂點數組下標)*/
    PrimTree.v[0]=v;  /*首先將開始頂點置于最小生成樹的頂點集合中*/
    /*此時最小生成樹只包含開始頂點*/
    G->vex[k].flag=1; /*標識開始頂點已在最小生成樹中*/
    for(i=0;i<G->vexnum;i++) 
	{
     /*對輔助結構數組NoInTreeVex[]進行初始化*/
        if(i==k)  
	        NoInTreeVex[i].lowcost=0;
/*如果為開始頂點,則開始頂點到達最小生成樹的代價為0,表示已在最小生成樹中*/
        else  
		{
	        NoInTreeVex[i].lowcost=G->arcs[i][k].adj;
/*否則,頂點i到達最小生成樹的代價初始為頂點i到達開始頂點的代價*/
	      NoInTreeVex[i].adj=k; /*頂點i通過開始頂點(k)與最小生成樹相連*/ 
		}
        DrawVex(G->vex[i]);  /*畫每個頂點*/
	}
    getch();
  
    for(i=1;i<G->vexnum;i++)
	{
/*從除去開始頂點的下一個頂點開始,依次將每個頂點包含到最小生成樹中來*/
       k=FindLowcostVex(G);
/*找到當前具有到達最小生成樹最小代價的頂點,用k表示*/  
       j=NoInTreeVex[k].adj;  /*求得這個頂點與最小生成樹相連的頂點,用j表示*/
       DrawArc(G->vex[k],G->vex[j],G->arcs[k][j].adj);
/*先畫出具有最小代價的頂點k與最小生成樹相連的弧*/
       DrawVex(G->vex[k]);  /*然后畫頂點k和與之相連的頂點j*/
       DrawVex(G->vex[j]);
       PrimTree.v[i]=G->vex[k].v; /*將頂點k保存到最小生成樹的頂點數組中*/
       PrimTree.arc[i].v1=G->vex[j].v;
/*將頂點k到達最小生成樹的弧保存,包括兩端頂點與代價*/
       PrimTree.arc[i].v2=G->vex[k].v;
       PrimTree.arc[i].cost=G->arcs[j][k].adj;
       G->vex[k].flag=1;   /*表示頂點k已包含在最小生成樹中*/
       /*此時生成了新的當前最小生成樹,即有新的頂點k包含進來*/
       getch();
/*以下是根據新的當前最小生成樹來調整尚未包含到生成樹中的頂點到達生成樹的代價*/
       for(j=0;j<G->vexnum;j++)
	   {
	       if(G->vex[j].flag==0)  /*如果該頂點尚未包含在生成樹中,則*/
	         if(G->arcs[k][j].adj<NoInTreeVex[j].lowcost)
			 {/*如果該頂點到達新包含進來的頂點k的代價小于之前到達生成樹的代價*/
                 NoInTreeVex[j].lowcost=G->arcs[k][j].adj;
                 /*則該頂點到達生成樹的代價變為該頂點到達頂點k的代價*/
		         NoInTreeVex[j].adj=k; /*且該頂點與生成樹相連的頂點變為頂點k*/ 
			 }
	   }
	}
}

main()
{
    MGraph G;
    int gd=DETECT,gm;
    initgraph(&gd,&gm,"c:\\tc");
    setbkcolor(BLACK);
    CreateAppMGraph(&G);
    ShowGraph(&G);
    getch();
    clearviewport();
    setbkcolor(BLACK);
    Prim(&G,'A');
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美男生操女生| 色8久久人人97超碰香蕉987| 丝袜a∨在线一区二区三区不卡| 国产日本亚洲高清| 亚洲欧美激情视频在线观看一区二区三区| 欧美日韩色综合| 欧美日韩精品电影| 欧美卡1卡2卡| 欧美变态tickle挠乳网站| 91.xcao| 51久久夜色精品国产麻豆| 欧美日韩精品电影| 日韩视频永久免费| 久久久久久一级片| 欧美国产日本视频| 日韩理论在线观看| 亚洲一级二级三级| 久久国产夜色精品鲁鲁99| 精品一区二区在线看| 成人性生交大片| 99re在线视频这里只有精品| 在线免费观看日本欧美| 欧美美女黄视频| 精品久久久久久久一区二区蜜臀| 欧美精品一区二区三区一线天视频 | 亚洲欧美一区二区三区国产精品| 亚洲婷婷国产精品电影人久久| 亚洲主播在线观看| 黑人巨大精品欧美一区| hitomi一区二区三区精品| 在线观看日韩精品| 欧美变态凌虐bdsm| 亚洲精品中文在线影院| 精品一区二区免费在线观看| 国产成人精品免费在线| 色噜噜久久综合| 欧美大尺度电影在线| 中文字幕制服丝袜成人av| 香蕉av福利精品导航| 国产精品996| 欧美精品久久久久久久久老牛影院| 亚洲精品在线电影| 亚洲国产中文字幕| 国产精品88888| 在线不卡免费av| 1区2区3区精品视频| 全部av―极品视觉盛宴亚洲| 91在线免费播放| 久久久久久久一区| 爽好多水快深点欧美视频| 不卡视频免费播放| 精品日韩一区二区| 亚洲一区二区三区视频在线播放| 国产乱码字幕精品高清av| 欧美亚一区二区| 亚洲人快播电影网| 国产91精品精华液一区二区三区| 91精品国产手机| 亚洲综合图片区| 91视频在线观看免费| 久久精品一区蜜桃臀影院| 青青青伊人色综合久久| 欧洲另类一二三四区| 国产精品对白交换视频| 国产老妇另类xxxxx| 日韩视频免费观看高清完整版 | 中文字幕第一区综合| 男男gaygay亚洲| 91精品国产一区二区人妖| 亚洲自拍偷拍麻豆| 一本大道av伊人久久综合| 亚洲欧美自拍偷拍色图| 国产91综合一区在线观看| 日韩精品一区二区三区四区视频| 亚洲成人午夜电影| 欧美日韩国产天堂| 亚洲电影在线播放| 欧美猛男gaygay网站| 亚洲一区二区三区四区在线观看 | 另类小说一区二区三区| 欧美一区二区视频在线观看2022| 亚洲成年人网站在线观看| 91久久精品一区二区二区| 亚洲欧美激情小说另类| 在线欧美日韩国产| 偷拍自拍另类欧美| 日韩视频在线永久播放| 美女网站在线免费欧美精品| 日韩欧美第一区| 国产一区二区三区久久悠悠色av | 国产精品黄色在线观看| 99精品视频在线观看免费| 亚洲码国产岛国毛片在线| 欧美性极品少妇| 美洲天堂一区二卡三卡四卡视频| 日韩一区二区精品| 国产高清亚洲一区| 亚洲老司机在线| 4438x亚洲最大成人网| 国产一区欧美日韩| 亚洲人成网站精品片在线观看| 91极品美女在线| 日本午夜精品视频在线观看| 久久精品视频在线看| www.亚洲色图| 日韩精品一二三| 日本一区二区三区在线不卡| 日本道在线观看一区二区| 日韩国产一二三区| 亚洲国产精品激情在线观看| 欧美系列一区二区| 奇米在线7777在线精品| 中文字幕的久久| 日韩三级电影网址| 91蜜桃视频在线| 久久精品国产第一区二区三区| 国产精品水嫩水嫩| 日韩区在线观看| 91捆绑美女网站| 精品一区二区影视| 亚洲在线视频免费观看| 国产亚洲精品精华液| 欧美日韩一级二级| 成人av综合在线| 国产在线不卡视频| 五月婷婷久久丁香| 亚洲精选视频在线| 国产欧美一区二区三区在线老狼| 欧美精品国产精品| 91视频精品在这里| 春色校园综合激情亚洲| 蜜桃一区二区三区四区| 亚洲国产精品久久艾草纯爱 | 在线观看视频欧美| 粉嫩蜜臀av国产精品网站| 免费在线一区观看| 亚洲成人1区2区| 亚洲精品成人天堂一二三| 久久精品亚洲一区二区三区浴池| 欧美日韩国产经典色站一区二区三区 | 偷窥少妇高潮呻吟av久久免费| 中文字幕一区二区在线观看 | 99久久精品国产网站| 国产麻豆欧美日韩一区| 蜜桃精品视频在线观看| 日韩中文字幕亚洲一区二区va在线 | 日精品一区二区三区| 亚洲一区二区欧美| 亚洲一区在线观看视频| 亚洲精品乱码久久久久久| 自拍偷拍欧美精品| 综合色天天鬼久久鬼色| 国产精品欧美久久久久一区二区| 久久精品日韩一区二区三区| 亚洲精品一区二区三区福利| 精品久久99ma| 国产亚洲精品久| 中文字幕中文字幕中文字幕亚洲无线 | 日韩欧美中文字幕精品| 91精品婷婷国产综合久久| 日韩一卡二卡三卡四卡| 日韩视频免费观看高清完整版在线观看| 欧美日韩成人一区二区| 欧美一区二区大片| 久久久亚洲高清| 国产精品美女久久久久久久久久久| 日本一区二区免费在线| √…a在线天堂一区| 亚洲码国产岛国毛片在线| 亚洲成人动漫在线观看| 国产成人啪午夜精品网站男同| 国产成人在线免费观看| 91视频在线看| 欧美精品123区| 精品国产1区二区| 国产精品麻豆一区二区| 亚洲人成网站影音先锋播放| 午夜精品视频一区| 国产综合成人久久大片91| 国产**成人网毛片九色| 欧美影片第一页| 欧美成人精品福利| 国产精品久久久久久久浪潮网站 | 欧美日韩视频第一区| 欧美一级片免费看| 国产精品不卡在线观看| 天天射综合影视| 粉嫩av一区二区三区| 欧美日韩综合在线| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 日韩一区二区三区精品视频| 欧美激情资源网| 性欧美大战久久久久久久久| 国产精品资源网站| 欧美色中文字幕| 久久久久国产精品人| 午夜精品久久久久久久久| 国产精品香蕉一区二区三区| 欧美日韩亚洲国产综合| 国产精品天天摸av网|