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

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

?? bo7-2.cpp

?? 數據結構算法解析第七章圖論的程序源碼
?? CPP
字號:
 // bo7-2.cpp 圖的鄰接表存儲(存儲結構由c7-21.h定義)的基本操作(14個)
 #include"bo2-3.cpp" // 不帶頭結點的單鏈表基本操作
 #include"func2-4.cpp" // 不帶頭結點的單鏈表擴展操作
 int LocateVex(ALGraph G,VertexType u)
 { // 初始條件:圖G存在,u和G中頂點有相同特征(頂點名稱相同)
   // 操作結果:若G中存在頂點u,則返回該頂點在圖中位置(序號);否則返回-1
   int i;
   for(i=0;i<G.vexnum;++i) // 對于所有頂點依次查找
     if(strcmp(u.name,G.vertices[i].data.name)==0) // 頂點與給定的u的頂點名稱相同
       return i; // 返回頂點序號
   return -1; // 圖G中不存在與頂點u有相同名稱的頂點
 }

 void CreateGraph(ALGraph &G)
 { // 采用鄰接表存儲結構,構造圖或網G(用一個函數構造4種圖)
   int i,j,k;
   VertexType v1,v2; // 頂點類型
   ElemType e; // 表結點的元素類型(存儲弧的信息)
   char s[3]="邊";
   printf("請輸入圖的類型(有向圖:0 有向網:1 無向圖:2 無向網:3):");
   scanf("%d",&G.kind);
   if(G.kind<2) // 有向
     strcpy(s,"弧");
   printf("請輸入圖的頂點數,邊數:");
   scanf("%d,%d",&G.vexnum,&G.arcnum);
   printf("請輸入%d個頂點的值(名稱<%d個字符):\n",G.vexnum,MAX_NAME);
   for(i=0;i<G.vexnum;++i) // 構造頂點向量
   { Input(G.vertices[i].data); // 輸入頂點信息
     G.vertices[i].firstarc=NULL; // 初始化與該頂點有關的出弧鏈表
   }
   printf("請輸入%d條%s的",G.arcnum,s);
   switch(G.kind)
   { case  DG:printf("弧尾 弧頭:\n"); // 設圖沒有弧(邊)信息
              break;
     case  DN:printf("弧尾 弧頭 弧的信息:\n");
              break;
     case UDG:printf("頂點1 頂點2:\n"); // 設圖沒有弧(邊)信息
              break;
     case UDN:printf("頂點1 頂點2 邊的信息:\n");
   }
   for(k=0;k<G.arcnum;++k) // 構造相關弧鏈表
   { scanf("%s%s",v1.name,v2.name); // 輸入2頂點名稱
     i=LocateVex(G,v1); // 弧尾
     j=LocateVex(G,v2); // 弧頭
     e.info=NULL; // 給待插表結點e賦值,設圖無弧(邊)信息
     if(G.kind%2) // 網
       InputArc(e.info); // 動態生成存儲空間,輸入弧的相關信息,在func7-4.cpp中
     e.adjvex=j; // 弧頭
     ListInsert(G.vertices[i].firstarc,1,e);
     // 將e插在第i個元素(出弧)的表頭,在bo2-3.cpp中
     if(G.kind>=2) // 無向圖或網,產生第2個表結點,并插在第j個元素(入弧)的表頭
     { e.adjvex=i; // e.info不變,不必再賦值
       ListInsert(G.vertices[j].firstarc,1,e); // 插在第j個元素的表頭,在bo2-3.cpp中
     }
   }
 }

 void CreateFromFile(ALGraph &G,char* filename)
 { // 采用鄰接表存儲結構,由文件構造圖或網G(用一個函數構造4種圖)
   int i,j,k;
   VertexType v1,v2; // 頂點類型
   ElemType e; // 表結點的元素類型(存儲弧的信息)
   FILE *f; // 文件指針類型
   f=fopen(filename,"r"); // 以讀的方式打開數據文件,并以f表示
   fscanf(f,"%d",&G.kind); // 由文件輸入G的類型
   fscanf(f,"%d",&G.vexnum); // 由文件輸入G的頂點數
   for(i=0;i<G.vexnum;++i) // 構造頂點向量
   { InputFromFile(f,G.vertices[i].data); // 由文件輸入頂點信息
     G.vertices[i].firstarc=NULL; // 初始化與該頂點有關的出弧鏈表
   }
   fscanf(f,"%d",&G.arcnum); // 由文件輸入G的弧(邊)數
   for(k=0;k<G.arcnum;++k) // 構造相關弧鏈表
   { fscanf(f,"%s%s",v1.name,v2.name); // 由文件輸入2頂點名稱
     i=LocateVex(G,v1); // 弧尾
     j=LocateVex(G,v2); // 弧頭
     e.info=NULL; // 給待插表結點e賦值,設圖無弧(邊)信息
     if(G.kind%2) // 網
       InputArcFromFile(f,e.info);
       // 動態生成存儲空間,由文件輸入弧的相關信息,在func7-4.cpp中
     e.adjvex=j; // 弧頭
     ListInsert(G.vertices[i].firstarc,1,e);
     // 將e插在第i個元素(出弧)的表頭,在bo2-3.cpp中
     if(G.kind>=2) // 無向圖或網,產生第2個表結點,并插在第j個元素(入弧)的表頭
     { e.adjvex=i; // e.info不變,不必再賦值
       ListInsert(G.vertices[j].firstarc,1,e); // 插在第j個元素的表頭,在bo2-3.cpp中
     }
   }
   fclose(f); // 關閉數據文件
 }

 VertexType GetVex(ALGraph G,int v)
 { // 初始條件:圖G存在,v是G中某個頂點的序號。操作結果:返回v的值
   if(v>=G.vexnum||v<0) // 圖G中不存在序號為v的頂點
     exit(OVERFLOW);
   return G.vertices[v].data; // 返回該頂點的信息
 }

 Status PutVex(ALGraph &G,VertexType v,VertexType value)
 { // 初始條件:圖G存在,v是G中某個頂點。操作結果:對v賦新值value
   int k=LocateVex(G,v); // k為頂點v在圖G中的序號
   if(k!=-1) // v是G的頂點
   { G.vertices[k].data=value; // 將新值賦給頂點v(其序號為k)
     return OK;
   }
   return ERROR; // v不是G的頂點
 }

 int FirstAdjVex(ALGraph G,int v)
 { // 初始條件:圖G存在,v是G中某個頂點的序號
   // 操作結果:返回v的第1個鄰接頂點的序號。若頂點在G中沒有鄰接頂點,則返回-1
   ArcNode *p=G.vertices[v].firstarc; // p指向頂點v的第1個鄰接頂點
   if(p) // 頂點v有鄰接頂點
     return p->data.adjvex; // 返回v的第1個鄰接頂點的序號
   else
     return -1; // 頂點v沒有鄰接頂點
 }

 Status equalvex(ElemType a,ElemType b)
 { // DeleteArc()、DeleteVex()和NextAdjVex()要調用的函數
   if(a.adjvex==b.adjvex) // 表結點的頂位置(序號)相同
     return OK;
   else
     return ERROR;
 }

 int NextAdjVex(ALGraph G,int v,int w)
 { // 初始條件:圖G存在,v是G中某個頂點的序號,w是v的鄰接頂點的序號
   // 操作結果:返回v的(相對于w的)下一個鄰接頂點的序號。
   //           若w是v的最后一個鄰接頂點,則返回-1
   LinkList p,p1; // p1在Point()中用作輔助指針,Point()在func2-4.cpp中
   ElemType e; // 表結點的元素類型(存儲弧的信息)
   e.adjvex=w;
   p=Point(G.vertices[v].firstarc,e,equalvex,p1);
   // p指向頂點v的鏈表中鄰接頂點為w的結點
   if(!p||!p->next) // 未找到w或w是最后一個鄰接點
     return -1;
   else // p->data.adjvex==w
     return p->next->data.adjvex; // 返回v的(相對于w的)下一個鄰接頂點的序號
 }

 void InsertVex(ALGraph &G,VertexType v)
 { // 初始條件:圖G存在,v和圖中頂點有相同特征
   // 操作結果:在圖G中增添新頂點v(不增添與頂點相關的弧,留待InsertArc()去做)
   G.vertices[G.vexnum].data=v; // 構造新頂點向量
   G.vertices[G.vexnum].firstarc=NULL; // 沒有與頂點相關的弧
   G.vexnum++; // 圖G的頂點數加1
 }

 Status InsertArc(ALGraph &G,VertexType v,VertexType w)
 { // 初始條件:圖G存在,v和w是G中兩個頂點
   // 操作結果:在G中增添弧<v,w>,若G是無向的,則還增添對稱弧<w,v>
   ElemType e; // 表結點的元素類型(存儲弧的信息)
   int i,j;
   char s1[3]="邊",s2[3]="—"; // 無向的情況
   if(G.kind<2) // 有向
   { strcpy(s1,"弧");
     strcpy(s2,"→");
   }
   i=LocateVex(G,v); // 弧尾或邊的序號
   j=LocateVex(G,w); // 弧頭或邊的序號
   if(i<0||j<0) // v和w至少有1個不是G中的頂點
     return ERROR;
   G.arcnum++; // 圖G的弧或邊的數目加1
   e.adjvex=j; // 弧頭表結點的值
   e.info=NULL; // 初值,設圖無弧(邊)信息
   if(G.kind%2) // 網
   { printf("請輸入%s%s%s%s的信息:",s1,v.name,s2,w.name);
     InputArc(e.info); // 動態生成存儲空間,輸入弧的相關信息,在func7-4.cpp中
   }
   ListInsert(G.vertices[i].firstarc,1,e); // 將e插在弧尾的表頭,在bo2-3.cpp中
   if(G.kind>=2) // 無向,生成另一個表結點
   { e.adjvex=i; // 弧尾表結點的值,e.info不變
     ListInsert(G.vertices[j].firstarc,1,e); // 將e插在弧頭的表頭
   }
   return OK;
 }

 Status DeleteArc(ALGraph &G,VertexType v,VertexType w)
 { // 初始條件:圖G存在,v和w是G中兩個頂點
   // 操作結果:在G中刪除弧<v,w>,若G是無向的,則還刪除對稱弧<w,v>
   int i,j,n;
   ElemType e; // 表結點的元素類型(存儲弧的信息)
   i=LocateVex(G,v); // i是頂點v(弧尾)的序號
   j=LocateVex(G,w); // j是頂點w(弧頭)的序號
   if(i<0||j<0||i==j) // v和w至少有1個不是G中的頂點,或v和w是G中的同一個頂點
     return ERROR;
   e.adjvex=j; // 弧頭表結點的值
   n=LocateElem(G.vertices[i].firstarc,e,equalvex);
   // 在弧尾鏈表中找弧頭表結點,將其在鏈表中的位序賦給n
   if(n) // 存在該弧
   { ListDelete(G.vertices[i].firstarc,n,e); // 在弧尾鏈表中刪除弧頭表結點,并用e返回其值
     G.arcnum--; // 弧或邊數減1
     if(G.kind%2) // 網,設圖無弧(邊)信息
       free(e.info); // 釋放動態生成的弧(邊)信息空間
     if(G.kind>=2) // 無向,刪除對稱弧<w,v>
     { e.adjvex=i; // 弧尾表結點的值
       n=LocateElem(G.vertices[j].firstarc,e,equalvex);
       // 在弧頭鏈表中找弧尾表結點,將其在鏈表中的位序賦給n
       ListDelete(G.vertices[j].firstarc,n,e);
       // 在弧頭鏈表中刪除弧尾表結點,并用e返回其值
     }
     return OK;
   }
   else // 未找到待刪除的弧
     return ERROR;
 }

 Status DeleteVex(ALGraph &G,VertexType v)
 { // 初始條件:圖G存在,v是G中某個頂點。操作結果:刪除G中頂點v及其相關的弧(邊)
   int i,k;
   LinkList p; // 表結點的指針類型
   k=LocateVex(G,v); // k為待刪除頂點v的序號
   if(k<0) // v不是圖G的頂點
     return ERROR;
   for(i=0;i<G.vexnum;i++)
     DeleteArc(G,v,G.vertices[i].data); // 刪除由頂點v發出的所有弧
   if(G.kind<2) // 有向
     for(i=0;i<G.vexnum;i++)
       DeleteArc(G,G.vertices[i].data,v); // 刪除發向頂點v的所有弧
   for(i=0;i<G.vexnum;i++) // 對于adjvex域>k的結點,其序號-1
   { p=G.vertices[i].firstarc; // p指向弧結點的單鏈表
     while(p) // 未到表尾
     { if(p->data.adjvex>k) // adjvex域>k
         p->data.adjvex--; // 序號-1(因為前移)
       p=p->next; // p指向下一個結點
     }
   }
   for(i=k+1;i<G.vexnum;i++)
     G.vertices[i-1]=G.vertices[i]; // 頂點v后面的頂點依次前移
   G.vexnum--; // 頂點數減1
   return OK;
 }

 void DestroyGraph(ALGraph &G)
 { // 初始條件:圖G存在。操作結果:銷毀圖G
   int i;
   for(i=G.vexnum-1;i>=0;i--) // 由大到小逐一刪除頂點及與其相關的弧(邊)
     DeleteVex(G,G.vertices[i].data);
 }
 
 void Display(ALGraph G)
 { // 輸出圖的鄰接矩陣G
   int i;
   ArcNode *p;
   char s1[3]="邊",s2[3]="—"; // 無向的情況
   if(G.kind<2) // 有向
   { strcpy(s1,"弧");
     strcpy(s2,"→");
   }
   switch(G.kind)
   { case  DG:printf("有向圖\n");
              break;
     case  DN:printf("有向網\n");
              break;
     case UDG:printf("無向圖\n");
              break;
     case UDN:printf("無向網\n");
   }
   printf("%d個頂點,依次是:",G.vexnum);
   for(i=0;i<G.vexnum;++i)
     Visit(GetVex(G,i)); // 根據頂點信息的類型,訪問第i個頂點,在func7-1.cpp中
   printf("\n%d條%s:\n",G.arcnum,s1);
   for(i=0;i<G.vexnum;i++)
   { p=G.vertices[i].firstarc; // p指向序號為i的頂點的第1條弧(邊)
     while(p) // p不為空
     { if(G.kind<=1||i<p->data.adjvex) // 有向或無向兩次中的一次
       { printf(" %s%s%s",G.vertices[i].data.name,s2,
         G.vertices[p->data.adjvex].data.name);
         if(G.kind%2) // 網
           OutputArc(p->data.info); // 輸出弧(邊)信息(包括權值),在func7-4.cpp中
       }
       p=p->nextarc; // p指向下一個表結點
     }
     printf("\n");
   }
 }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美精品一区二区色综合 | 欧美日韩dvd在线观看| 日韩精品一区二区三区视频播放| 国产精品成人免费| 久久99久久精品欧美| 在线观看欧美精品| 欧美国产精品v| 日韩一区欧美一区| 亚洲国产激情av| 捆绑变态av一区二区三区| 色婷婷一区二区三区四区| 国产日韩欧美精品在线| 美女在线观看视频一区二区| 在线观看一区不卡| 日韩久久一区二区| 亚洲二区在线视频| 日韩一级大片在线观看| 一区二区三区四区不卡在线 | 成人av在线看| 亚洲老妇xxxxxx| 99这里都是精品| 亚洲精品国产无天堂网2021| 91成人免费在线视频| 亚洲一区在线电影| 欧美日韩国产三级| 日本女人一区二区三区| 欧美一区二区在线免费观看| 欧美色综合网站| 欧美日韩免费一区二区三区 | 91香蕉国产在线观看软件| 国产性天天综合网| 日韩欧美卡一卡二| 九色|91porny| 中文一区在线播放| 91福利视频网站| 美国一区二区三区在线播放| 精品va天堂亚洲国产| 国产激情91久久精品导航 | 视频一区欧美日韩| 欧美成人官网二区| 成人激情视频网站| 亚洲国产精品一区二区久久| 欧美成人伊人久久综合网| 韩国精品主播一区二区在线观看 | 亚洲激情男女视频| 国产美女精品一区二区三区| 中文字幕av一区 二区| 555www色欧美视频| 91精品一区二区三区久久久久久 | 2021久久国产精品不只是精品| 日日夜夜精品视频免费| 欧美一级在线免费| 久久国产精品一区二区| 欧美不卡在线视频| 国产成人精品影视| 亚洲色图欧美偷拍| 色菇凉天天综合网| 亚洲va欧美va国产va天堂影院| 欧美精品日韩综合在线| 久久99国产精品麻豆| 国产欧美一区二区精品忘忧草| 成人激情校园春色| 亚洲美女少妇撒尿| 欧美日本一区二区三区四区| 蜜臀91精品一区二区三区 | 欧美一级片免费看| 中文字幕一区二区三区不卡| 人禽交欧美网站| 久久久久国色av免费看影院| 成人高清免费观看| 亚洲午夜av在线| 欧美成人乱码一区二区三区| 国产黄色成人av| 亚洲免费av高清| 欧美一级专区免费大片| 成人天堂资源www在线| 一区二区视频在线| 欧美一区二区视频免费观看| 国产成人在线电影| 一级做a爱片久久| 欧美mv日韩mv国产网站| 99久久99久久精品免费观看| 日本欧美一区二区三区乱码| 日本一二三四高清不卡| 欧美三区在线观看| 国产精品综合二区| 亚洲国产另类av| 日本一区免费视频| 欧美日韩免费电影| 国产大片一区二区| 午夜免费欧美电影| 国产精品无人区| 91精品欧美福利在线观看| 从欧美一区二区三区| 偷窥国产亚洲免费视频| 国产女同性恋一区二区| 337p亚洲精品色噜噜噜| 成人av在线影院| 捆绑调教一区二区三区| 亚洲综合色自拍一区| 国产午夜亚洲精品午夜鲁丝片| 欧美体内she精高潮| 国产成人亚洲综合a∨猫咪| 香蕉久久一区二区不卡无毒影院| 日本一区二区久久| 欧美videofree性高清杂交| 色偷偷88欧美精品久久久| 国产在线不卡一区| 亚洲aⅴ怡春院| 亚洲色图欧洲色图| 久久精品欧美一区二区三区麻豆| 欧美三日本三级三级在线播放| 懂色中文一区二区在线播放| 青青草国产精品97视觉盛宴| 亚洲精品国产精华液| 国产日韩av一区| 日韩女优制服丝袜电影| 欧美日韩国产美| 色综合咪咪久久| 成人av在线资源| 国产美女一区二区三区| 天天操天天干天天综合网| 亚洲欧美日韩综合aⅴ视频| 国产亚洲欧美在线| 日韩精品中文字幕在线不卡尤物| 欧美性生交片4| 色婷婷av一区二区| av不卡免费电影| 岛国精品一区二区| 国产乱码精品一区二区三区五月婷| 午夜精品123| 亚洲午夜激情av| 亚洲女同一区二区| 99精品久久只有精品| 精品一区二区三区视频| 麻豆成人免费电影| 蜜乳av一区二区| 日本欧美一区二区| 日本欧美一区二区三区| 午夜天堂影视香蕉久久| 亚洲一区二区三区三| 亚洲精品视频一区二区| 亚洲视频一区二区在线| 一区在线观看免费| 国产精品久久久久影院老司| 欧美国产成人精品| 国产精品久久久久影视| 国产精品你懂的在线欣赏| 国产日韩综合av| 精品精品国产高清一毛片一天堂| 欧美一区二区三区男人的天堂| 欧美美女网站色| 欧美高清你懂得| 欧美一级欧美一级在线播放| 69p69国产精品| 欧美一区二区三区在| 日韩一级片在线播放| 精品少妇一区二区| 久久新电视剧免费观看| 国产视频一区二区三区在线观看| 久久久久久黄色| 中文一区在线播放| 亚洲日本电影在线| 伊人色综合久久天天| 亚洲一区中文在线| 爽爽淫人综合网网站| 日本亚洲最大的色成网站www| 蜜桃免费网站一区二区三区| 极品美女销魂一区二区三区免费| 国产一区激情在线| 高清不卡一区二区在线| 99视频有精品| 欧美日韩一区不卡| 欧美大片在线观看一区二区| 国产亚洲欧美色| 国产精品灌醉下药二区| 一区2区3区在线看| 免费成人在线播放| 国产高清视频一区| 91理论电影在线观看| 欧美日韩免费观看一区三区| 日韩免费高清av| 国产日产欧美精品一区二区三区| 国产网红主播福利一区二区| 亚洲同性gay激情无套| 午夜精品免费在线| 国产麻豆精品95视频| 99国产精品久久久久久久久久 | 欧美午夜视频网站| 日韩美女天天操| 国产精品日日摸夜夜摸av| 一区二区三区日韩欧美精品| 日韩福利视频网| 国产91富婆露脸刺激对白| 色欧美日韩亚洲| 欧美本精品男人aⅴ天堂| 中文字幕在线不卡一区| 爽爽淫人综合网网站| 国产v日产∨综合v精品视频| 欧美日韩在线播放|