乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      基于鄰結(jié)表的圖的DFS、BFS遍歷

       520jefferson 2015-08-21
      #include "StdAfx.h"
      #include "Graphlist.h"

      #include <iostream>
      #include <stdio.h>
      #include <stdlib.h>
      #include <queue>
      //鄰結(jié)表的遍歷
      using namespace std;
      #define MAXNODE 1000 //圖中頂點的最大數(shù)
      typedef int infotype;
      typedef char vertype;
      struct ArcNode  //邊界點類型
      {
      int adjvex; //該邊的終點編號
      ArcNode *next; //指向下一條邊的指針
      // infotype *info; //該邊的相關(guān)信息
      };
      struct VerNode//表頭節(jié)點
      {
      vertype vertex; //頂點信息
      ArcNode *firstarc; //指向第一個鄰接點的指針
      };

      struct AlGraph//鄰接表
      {
      VerNode vertices[MAXNODE];//鄰接表
      int vexnum,arcnum; //頂點和邊的數(shù)目
      };

      AlGraph CreateAdjList(AlGraph g)//建立有向圖的鄰接表存儲結(jié)構(gòu)
      {
      int n;
      cin>>n;
      for(int i = 1;i <= n; i++)
      {
      cin>>g.vertices[i].vertex;//輸入頂點信息
      g.vertices[i].firstarc=NULL;//初始化每個鏈表為空
      }
      int v1, v2;
      cin>>v1>>v2; //輸入一條邊依附的兩個頂點序號
      int e = 0; //圖的邊數(shù)
      while(v1 != 0&&v2!=0) //題目要求兩頂點之一為0結(jié)束
      {
      ArcNode *p = (ArcNode*)malloc(sizeof(ArcNode));
      //用頭插法插入節(jié)點以建立鏈表
      p->adjvex = v2;
      p->next = g.vertices[v1].firstarc;
      g.vertices[v1].firstarc=p;
      e++;
      cin>>v1>>v2;
      }
      g.vexnum = n;
      g.arcnum = e;
      return g;
      }

      int visited[MAXNODE]; //訪問標志數(shù)組
      void VisitFunc(AlGraph g, int v)//訪問v
      {
      cout<<g.vertices[v].vertex <<endl;
      }
      int GraphFirstAdj(AlGraph g , int v)//得到v的第一個鄰結(jié)點
      {
      if(g.vertices[v].firstarc!=NULL)
      return g.vertices[v].firstarc->adjvex;
      else return 0;
      }

      int GraphNextAdj(AlGraph g,int v, int w)//返回v的下一個鄰結(jié)點,若w是v的最后一個鄰結(jié)點則返回0
      {
      ArcNode *p = (ArcNode*)malloc(sizeof(ArcNode));
      p = g.vertices[v].firstarc;
      while(p)
      {
      if(p->adjvex == w && p->next != NULL)
      return p->next->adjvex;
      p = p->next;
      }
      return 0;
      }

      void DFS(AlGraph g, int v)//dfs
      {
      visited[v] = 1; VisitFunc(g,v);//訪問v頂點(輸出v)
      for(int w = GraphFirstAdj(g,v); w!= 0; w = GraphNextAdj(g,v,w))
      {
      if(!visited[w])DFS(g,w);//對v的尚未訪問的鄰接頂點w遞歸調(diào)用
      }
      }

      void DFSTraverse(AlGraph g) //圖的dfs遍歷
      {
      for(int i = 1; i <= g.vexnum; i++) visited[i] = 0;//初始訪問數(shù)組置未訪問標志
      for(int i = 1; i <= g.vexnum; i++)
      {
      if(!visited[i])DFS(g,i);//對未訪問的頂點調(diào)用DFS
      }
      }

      void BFSTraverse(AlGraph g)// 圖的bfs遍歷
      {
      for(int i = 1; i <= g.vexnum;i++) visited[i] = 0;//初始訪問數(shù)組
      queue<int> q;
      for(int i = 1;i <= g.vexnum;i++)
      {
      if(!visited[i])
      {
      q.push(i);
      visited[i] = 1;
      VisitFunc(g,i);
      while(!q.empty())
      {
      int v = q.front();//對頭元素出隊列并置為v
      q.pop();
      for(int w = GraphFirstAdj(g,v); w!=0; w = GraphNextAdj(g,v,w))//遍歷v的鄰結(jié)點
      {
      if(!visited[w])
      {
      q.push(w);//v的尚未訪問的鄰結(jié)頂點w入隊列Q
      visited[w] = 1;
      VisitFunc(g,w);
      }
      }
      }
      }
      }

      }

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多