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

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

?? graphm.txt

?? 數據結構的c++實現,源代碼全部在C++builder中運行.第六部分
?? TXT
字號:
//圖的相關數據類型的定義graph.h
//最多頂點數
const int MaxV=10;
//最大權值
const int MaxValue=99;
//定義鄰接表中的邊結點類型
struct edgenode {
 int adjvex;   //鄰接點域
 int weight;   //權值域
 edgenode* next;//指向下一個邊結點的鏈域
};
//定義鄰接表類型
typedef edgenode** adjlist;
//鄰接矩陣類定義
class AdjMatrix
{private:
  char g[MaxV];//頂點信息數組
  int size;//當前頂點數
  int GA[MaxV][MaxV];//定義鄰接矩陣GA
  int numE;//當前邊數
 public:
  //構造函數,初始化圖的鄰接矩陣
  AdjMatrix(int n,int k2);
  //判斷圖空否
  bool GraphEmpty() {return size==0;}
  //取當前頂點數
  int NumV() {return size;}
  //取當前邊數
  int NumEdges() {return numE;}
  //取頂點i的值
  char GetValue(const int i);
  //取弧<v1,v2>的權
  int GetWeight(const int v1,const int v2);
  //在位置pos處插入頂點V
  void InsertV(const char &V,int pos);
  //插入弧<v1,v2>,權為weight
  void InsertEdge(const int v1,const int v2,int weight);
  //刪除頂點i與頂點i相關的所有邊
  char DeleteVE(const int i);
  //刪除弧<v1,v2>
  void DeleteEdge(const int v1,const int v2);
  //建立圖的鄰接矩陣
  void CreateMatrix(int n, int k1,int k2);
  //k1為0則無向否則為有向,k2為0則無權否則為有權
  //從初始點vi出發深度優先搜索由鄰接矩陣表示的圖
  void dfsMatrix(bool*& visited,int i,int n,int k2);
  //從初始點vi出發廣度優先搜索由鄰接矩陣表示的圖
  void bfsMatrix(bool*& visited,int i,int n,int k2);
  //由圖的鄰接矩陣得到圖的鄰接表
  void graphChange(adjlist &GL,int n,int k2);
  //檢查輸入的邊序號是否越界,若越界則重輸
  void Check(int n,int& i,int& j);
  //由圖的鄰接矩陣建立圖
  void Creatgraph(int n,int k2);
  //對非連通圖進行深度優先搜索
  void dfsMatrix(int n,int k2);
  //對非連通圖進行廣度優先搜索
  void bfsMatrix(int n,int k2);
};
//圖的相關運算的實現graph.cpp
#include"graph.h"
//構造函數,初始化圖的鄰接矩陣
AdjMatrix::AdjMatrix(int n,int k2)
{int i,j;
 if(k2==0){//初始化無(有)向無權圖
  for(i=0;i<n;i++)
   for(j=0;j<n;j++)
    GA[i][j]=0;}
 else {//初始化無(有)向有權圖
  for(i=0;i<n;i++)
   for(j=0;j<n;j++)
    if(i==j) GA[i][j]=0;
    else GA[i][j]=MaxValue;}
 size=numE=0;
}
//建立圖的鄰接矩陣
void AdjMatrix::CreateMatrix(int n,int k1,int k2)
//k1為0則無向否則為有向,k2為0則無權否則為有權
{int i,j,k,e,w;
 cout<<"輸入圖的總邊數:";
   cin>>e;
 if(k1==0 && k2==0) { //建立無向無權圖
  cout<<"輸入"<<e<<"條無向無權邊的起點和終點序號!"<<endl;
  for(k=1; k<=e; k++) {
   cin>>i>>j;
   Check(n,i,j);
   GA[i][j]=GA[j][i]=1;}
  }
 else if(k1==0 && k2!=0) { //建立無向有權圖
   cout<<"輸入"<<e<<"條無向帶權邊的起點和終點序號及權值!"<<endl;
   for(k=1; k<=e; k++) {
    cin>>i>>j>>w;
    Check(n,i,j);
    GA[i][j]=GA[j][i]=w;}
  }
  else if(k1!=0 && k2==0) { //建立有向無權圖
    cout<<"輸入"<<e<<"條有向無權邊的起點和終點序號!"<<endl;
    for(k=1; k<=e; k++) {
     cin>>i>>j;
     Check(n,i,j);
     GA[i][j]=1;}
  }
  else if(k1!=0 && k2!=0) { //建立有向有權圖
    cout<<"輸入"<<e<<"條有向有權邊的起點和終點序號及權值!"<<endl;
    for(k=1; k<=e; k++) {
     cin>>i>>j>>w;
     Check(n,i,j);
     GA[i][j]=w;}}
  numE=e;   
  cout<<"創建后的鄰接矩陣:\n";   
  for(i=0;i<n;i++)
  {for(j=0;j<n;j++)
    cout<<setw(4)<<GA[i][j];
   cout<<endl;}
}
//從初始點vi出發深度優先搜索由鄰接矩陣表示的圖
void AdjMatrix::dfsMatrix(bool*& visited,int i,int n,int k2)
{cout<<g[i]<<':'<<i<<"  ";
 visited[i]=true;        //標記vi已被訪問過
 for(int j=0; j<n; j++)  //依次搜索vi的每個鄰接點
  if(k2==0)
   {if(i!=j&&GA[i][j]!=0&&!visited[j])
     dfsMatrix(visited,j,n,k2);}
  else
   if(i!=j&&GA[i][j]!=MaxValue&&!visited[j])
     dfsMatrix(visited,j,n,k2);
}
//從初始點vi出發廣度優先搜索由鄰接矩陣表示的圖
void AdjMatrix::bfsMatrix(bool*& visited,int i,int n,int k2)
{const int MaxLength=30;
 //定義一個隊列q,其元素類型應為整型
 int q[MaxLength]={0};
 //定義隊首和隊尾指針
 int front=0,rear=0;
 //訪問初始點vi
 cout<<g[i]<<':'<<i<<"  ";
 //標記初始點vi已訪問過
 visited[i]=true;
  //將已訪問過的初始點序號i入隊
 q[++rear]=i;
  //當隊列非空時進行循環處理
 while(front!=rear) {
  //刪除隊首元素,第一次執行時k的值為i
  front=(front+1)%MaxLength;
  int k=q[front];
  //依次搜索vk的每一個可能的鄰接點
  for(int j=0;j<n;j++)
   if(k2==0)
    {if(k!=j&&GA[k][j]!=0&&!visited[j])
     {//訪問一個未被訪問過的鄰接點vj
      cout<<g[j]<<':'<<j<<"  ";
      visited[j]=true;     //標記vj已訪問過
      rear=(rear+1)%MaxLength;//頂點序號j入隊
      q[rear]=j;
     }
    }
   else
    if(k!=j&&GA[k][j]!=MaxValue&&!visited[j])
     {//訪問一個未被訪問過的鄰接點vj
      cout<<g[j]<<':'<<j<<"  ";
      visited[j]=true;   //標記vj已訪問過
      rear=(rear+1)%MaxLength;//頂點序號j入隊
      q[rear]=j;
     }
}}
//檢查輸入的邊序號是否越界,若越界則重輸
void AdjMatrix::Check(int n,int& i,int& j)
{while(1) {
  if(i<0||i>=n||j<0||j>=n)
    cout<<"輸入有誤,請重輸!";
  else return;
  cin>>i>>j;
 }
}
//由圖的鄰接矩陣得到圖的鄰接表
void AdjMatrix::graphChange(adjlist &GL,int n,int k2)
{int i,j;
 if(k2==0)
 {for(i=0;i<n;i++){
  for(j=0;j<n;j++)
    if(GA[i][j]!=0) {
     edgenode* p=new edgenode;
     p->adjvex=j;
     p->next=GL[i];GL[i]=p;
     cout<<'('<<i<<','<<p->adjvex<<") ";}
  cout<<endl;}}
 else {
  for(i=0;i<n;i++){
   for(j=0;j<n;j++)
    if(GA[i][j]!=0 && GA[i][j]!=MaxValue) {
     edgenode* p=new edgenode;
     p->adjvex=j;p->weight=GA[i][j];
     p->next=GL[i];GL[i]=p;
     cout<<'('<<i<<','<<p->adjvex<<','<<p->weight<<") ";}
   cout<<endl;}
}}
//由圖的鄰接矩陣建立圖
void AdjMatrix::Creatgraph(int n,int k2)
{int i,j,k,m=0;
 if(k2==0)
 {for(i=0;i<n;i++){
   k=i;
  for(j=0;j<n;j++)
    if(GA[i][j]!=0)
     if(k==i&&m<n)
      {g[m]='A'+m;size++;
       cout<<g[m]<<'('<<i<<','<<j<<") ";
       m++;
      }
  }
  cout<<endl;}
 else {
  for(i=0;i<n;i++){
   k=i;
   for(j=0;j<n;j++)
    if(GA[i][j]!=0 && GA[i][j]!=MaxValue)
     if(k==i&&m<n)
      {g[m]='A'+m;size++;
       cout<<g[m]<<'('<<i<<','<<j<<','<<GA[i][j]<<") ";
       m++;
      }
  }
 cout<<endl;}
 g[n]='\0';
}
//取頂點i的值
char AdjMatrix::GetValue(const int i)
{if(i<0||i>size)
  {cerr<<"參數i越界!\n";exit(1);}
 return g[i];
}
//取弧<v1,v2>的權
int AdjMatrix::GetWeight(const int v1,const int v2)
{if(v1<0||v1>size||v2<0||v2>size)
  {cerr<<"參數v1或v2越界!\n";exit(1);}
 return GA[v1][v2]; 
}
//在位置pos處插入頂點V
void AdjMatrix::InsertV(const char &V,int pos)
{int i;
 if(size==MaxV)
  {cerr<<"表已滿,無法插入!\n";exit(1);}
 if(pos<0||pos>size)
  {cerr<<"參數pos越界!\n";exit(1);}
 for(i=size;i>pos;i--) g[i]=g[i-1];
 g[pos]=V;
 size++; 
}
//插入弧<v1,v2>,權為weight
void AdjMatrix::InsertEdge(const int v1,const int v2,int weight)
{if(v1<0||v1>size||v2<0||v2>size)
  {cerr<<"參數v1或v2越界!\n";exit(1);}
 GA[v1][v2]=weight;
 numE++; 
}
//刪除頂點v與頂點v相關的所有邊
char AdjMatrix::DeleteVE(const int v)
{for(int i=0;i<size;i++)
  for(int j=0;j<size;j++)
   if((i==v||j==v)&&GA[i][j]>0&&GA[i][j]<MaxValue)
    {GA[i][j]=MaxValue;
     numE--;}
 if(size==0)
  {cerr<<"表已空,無元素可刪!\n";exit(1);}
 if(v<0||v>size-1)
  {cerr<<"參數v越界!\n";exit(1);}
 char temp=g[v];
 for(int i=v;i<size-1;i++) g[i]=g[i+1];
 size--;
 g[size]='\0';
 return temp;
}
//刪除弧<v1,v2>
void AdjMatrix::DeleteEdge(const int v1,const int v2)
{if(v1<0||v1>size||v2<0||v2>size||v1==v2)
  {cerr<<"參數v1或v2出錯!\n";exit(1);}
 GA[v1][v2]=MaxValue;
 numE--;
}
//對非連通圖進行深度優先搜索
void AdjMatrix::dfsMatrix(int n,int k2)
{bool *vis=new bool[NumV()];
 for(int i=0;i<NumV();i++) vis[i]=false;
 for(int i=0;i<NumV();i++)
  if(!vis[i]) dfsMatrix(vis,i,n,k2);
 delete []vis;
}
//對非連通圖進行廣度優先搜索
void AdjMatrix::bfsMatrix(int n,int k2)
{bool *vis=new bool[NumV()];
 for(int i=0;i<NumV();i++) vis[i]=false;
 for(int i=0;i<NumV();i++)
  if(!vis[i]) bfsMatrix(vis,i,n,k2);
 delete []vis;
}
//圖的相關運算的測試graphM.cpp
#include<iostream.h>
#include<iomanip.h>
#include<stdlib.h>
#include "graph.cpp"
void main()
{cout<<"graphM.cpp運行結果:\n";
 //定義圖的點數及搜索起始點序號等
 int n,k,i,j;
 //k1為0則無向否則為有向,k2為0則無權否則為有權
 int k1,k2;
 //標記已訪問過的點
 bool *vis;
 //定義鄰接表
 adjlist AL;
 cout<<"輸入圖的點數n=";cin>>n;
 AL=new edgenode*[n];
 vis=new bool[n];
 if(!vis) {cout<<"申請堆內存失敗!\n";exit(1);}
 for(i=0;i<n;i++)
  vis[i]=false;
 cout<<"輸入選擇無向(權)與有向(權)圖的值k1,k2:";
 cin>>k1>>k2;
 //定義鄰接矩陣
 AdjMatrix A(n,k2);
 A.CreateMatrix(n,k1,k2);
 cout<<"出發點Vk的序號=";cin>>k;
 cout<<"\n輸出鄰接矩陣相應圖的每個頂點:\n";
 A.Creatgraph(n,k2);
 cout<<"當前的頂點數為:"<<A.NumV()<<endl;
 cout<<"當前的邊數為:"<<A.NumEdges()<<endl;

 cout<<"圖的深度優先搜索順序:\n";
 A.dfsMatrix(vis,k,n,k2);
 for(i=0;i<n;i++) vis[i]=false;
 cout<<"\n圖的廣度優先搜索順序:\n";
 A.bfsMatrix(vis,k,n,k2);

 cout<<"\n輸出鄰接表的每個鄰接點:\n";
 for(i=0;i<n;i++) vis[i]=false;
 A.graphChange(AL,n,k2);
 delete []vis;

 A.DeleteEdge(0,2);
 A.DeleteEdge(2,0);

 cout<<"當前的頂點數為:"<<A.NumV()<<endl;
 cout<<"當前的邊數為:"<<A.NumEdges()<<endl;
 cout<<"圖的深度優先搜索順序:\n";
 A.dfsMatrix(n,k2);
 cout<<"\n圖的廣度優先搜索順序:\n";
 A.bfsMatrix(n,k2);
 cin.get();cin.get();}
graphM.cpp運行結果:
輸入圖的點數n=7
輸入選擇無向(權)與有向(權)圖的值k1,k2:0  1
輸入圖的總邊數:12
輸入12條無向帶權邊的起點和終點序號及權值!
0 1 1 0 2 1 1 3 1 1 4 1 2 5 1 2 6 1
1 0 1 2 0 1 3 1 1 4 1 1 5 2 1 6 2 1
創建后的鄰接矩陣:
   0   1   1  99  99  99  99
   1   0  99   1   1  99  99
   1  99   0  99  99   1   1
  99   1  99   0  99  99  99
  99   1  99  99   0  99  99
  99  99   1  99  99   0  99
  99  99   1  99  99  99   0
出發點Vk的序號=0
輸出鄰接矩陣相應圖的每個頂點:
A(0,1,1) B(0,2,1) C(1,0,1) D(1,3,1) E(1,4,1) F(2,0,1) G(2,5,1) 
當前的頂點數為:7
當前的邊數為:12
圖的深度優先搜索順序:
A:0  B:1  D:3  E:4  C:2  F:5  G:6  
圖的廣度優先搜索順序:
A:0  B:1  C:2  D:3  E:4  F:5  G:6  
輸出鄰接表的每個鄰接點:
(0,1,1) (0,2,1) 
(1,0,1) (1,3,1) (1,4,1) 
(2,0,1) (2,5,1) (2,6,1) 
(3,1,1) 
(4,1,1) 
(5,2,1) 
(6,2,1) 
當前的頂點數為:7
當前的邊數為:10
圖的深度優先搜索順序:
A:0  B:1  D:3  E:4  C:2  F:5  G:6  
圖的廣度優先搜索順序:
A:0  B:1  D:3  E:4  C:2  F:5  G:6  

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久国产精品麻豆ai换脸 | 99久久精品国产毛片| 成人免费三级在线| 6080yy午夜一二三区久久| 欧美国产日产图区| 婷婷成人综合网| 91麻豆福利精品推荐| 欧美精品一区视频| 亚洲大片在线观看| eeuss鲁片一区二区三区在线观看| 欧美精品丝袜中出| 亚洲女女做受ⅹxx高潮| 国产精品亚洲视频| 9191国产精品| 亚洲一区二区四区蜜桃| 成人深夜福利app| 精品毛片乱码1区2区3区| 亚洲成a人v欧美综合天堂| av亚洲精华国产精华精华| 久久日韩粉嫩一区二区三区| 日本一区中文字幕| 欧美日韩国产一区二区三区地区| 综合在线观看色| 成人一级片网址| 久久精品一级爱片| 韩国午夜理伦三级不卡影院| 日韩一区二区在线播放| 亚洲一区二区欧美激情| 色av一区二区| 亚洲激情在线激情| 色天天综合久久久久综合片| 国产欧美日韩另类一区| 国产传媒久久文化传媒| 国产欧美一区二区在线观看| 国产精品系列在线播放| 欧美国产在线观看| 成人激情免费电影网址| 国产精品欧美精品| 99视频精品在线| 亚洲天堂a在线| 99国产精品久久久久| 亚洲男人的天堂网| 在线视频一区二区免费| 午夜伦欧美伦电影理论片| 在线观看91精品国产麻豆| 蜜桃视频免费观看一区| 亚洲精品一区二区三区精华液| 国产黑丝在线一区二区三区| 国产精品少妇自拍| 日韩午夜精品视频| 久久99国产精品久久99| 国产偷v国产偷v亚洲高清| 国产高清精品久久久久| 中文字幕日韩一区| 日本丰满少妇一区二区三区| 天天做天天摸天天爽国产一区 | 国产91高潮流白浆在线麻豆| 国产精品久久久久久久久晋中 | 国产精品青草久久| 91女厕偷拍女厕偷拍高清| 亚洲午夜久久久久久久久久久 | 91久久免费观看| 亚洲福利一二三区| 精品国产污网站| 北条麻妃国产九九精品视频| 一区二区日韩av| 日韩精品中午字幕| thepron国产精品| 午夜视频在线观看一区二区| 久久久综合视频| 91豆麻精品91久久久久久| 美女视频网站久久| 自拍偷自拍亚洲精品播放| 91精品啪在线观看国产60岁| 国产成人av资源| 首页国产丝袜综合| 国产精品久久久久久久第一福利 | 亚洲欧美激情一区二区| 91精品午夜视频| 99在线精品一区二区三区| 日韩电影在线观看电影| 欧美国产97人人爽人人喊| 欧美天堂一区二区三区| 成人小视频免费在线观看| 亚洲成人av中文| 国产精品区一区二区三区| 欧美色成人综合| 国v精品久久久网| 蜜桃视频一区二区三区 | 色婷婷久久综合| 国产一区二区三区四区五区美女 | 国产精品日产欧美久久久久| 7777精品伊人久久久大香线蕉| 成人深夜福利app| 久久99精品久久久久婷婷| 夜夜亚洲天天久久| 国产精品国产三级国产a| 精品久久久久久久久久久久久久久| 色婷婷久久综合| 成人av在线看| 国产v日产∨综合v精品视频| 蜜芽一区二区三区| 香蕉久久一区二区不卡无毒影院 | 国产成人激情av| 激情图区综合网| 美女一区二区三区| 日本中文字幕不卡| 午夜av区久久| 亚洲国产另类精品专区| 亚洲精品日韩一| 亚洲精品欧美专区| 尤物视频一区二区| 亚洲最大成人网4388xx| 一二三区精品福利视频| 亚洲人成小说网站色在线| 国产精品福利影院| 日韩美女视频19| 亚洲三级理论片| 亚洲欧美激情视频在线观看一区二区三区 | 亚洲午夜视频在线观看| 亚洲国产日韩精品| 亚洲成av人影院| 青青草国产成人av片免费| 美女被吸乳得到大胸91| 经典三级在线一区| 国产精品伊人色| 懂色av一区二区在线播放| 成人午夜看片网址| 91丨九色丨黑人外教| 欧美亚洲高清一区二区三区不卡| 色欲综合视频天天天| 欧美亚洲高清一区二区三区不卡| 欧美日韩国产首页| 精品少妇一区二区三区免费观看| 日韩欧美激情在线| 亚洲sss视频在线视频| 亚洲一区二区三区中文字幕| 五月激情丁香一区二区三区| 亚洲一区二区三区视频在线播放 | 国产99久久久久| 另类中文字幕网| 毛片av一区二区| 精品一区二区三区久久久| 久久精品国产亚洲一区二区三区| 国产麻豆精品一区二区| 国产一区三区三区| 国产99久久久国产精品潘金 | 精品视频一区二区不卡| 色偷偷一区二区三区| 欧美一区二区三区在线观看| 日韩欧美中文字幕精品| 欧美不卡视频一区| 久久精品欧美日韩精品 | 欧美一三区三区四区免费在线看| 制服丝袜成人动漫| 精品国产乱码久久| 中文字幕免费在线观看视频一区| 一区二区三区日韩欧美| 肉色丝袜一区二区| 久久成人综合网| 成人午夜电影网站| 欧美性猛交xxxx乱大交退制版 | 久久精品99国产国产精| 国产综合色视频| 不卡的av中国片| 久久99精品国产麻豆婷婷| 色综合一区二区| 91麻豆精品国产综合久久久久久| 亚洲精品一区二区三区四区高清| 无码av中文一区二区三区桃花岛| 成人性色生活片| 欧美老年两性高潮| 久久久久久免费毛片精品| 综合久久久久久| 午夜精品福利久久久| 国产又粗又猛又爽又黄91精品| 91老师国产黑色丝袜在线| 69久久夜色精品国产69蝌蚪网| 久久综合久久鬼色| 日日噜噜夜夜狠狠视频欧美人| 国产精品456露脸| 精品视频1区2区3区| 精品剧情v国产在线观看在线| 亚洲国产精品一区二区久久| 国产乱国产乱300精品| 欧美日韩在线不卡| 国产午夜亚洲精品午夜鲁丝片| 日本不卡一二三| 91啪九色porn原创视频在线观看| 日韩欧美在线综合网| 亚洲欧洲精品一区二区三区不卡| 精品一区二区免费视频| 欧美亚洲一区二区在线观看| 国产三级精品三级| 午夜伦理一区二区| 欧美三级欧美一级| 日韩伦理av电影| 国产成人精品亚洲日本在线桃色| 日韩精品一区二区三区四区视频| 一区二区三区丝袜|