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

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

?? 新建 文本文檔.txt

?? 摘要:本程序將建立一個用鄰接表方式存儲的有向圖
?? TXT
字號:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include<conio.h>
#include<iostream>
#define MAX_VERTEX_NUM 20 /*最大頂點數*/
#define INFINITY 32767    /*最大值*/
#define STACK_INIT_SIZE 100    //棧的最大空間
#define STACKINCREMENT 20    //棧的追加空間單位
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define OUTPLACE -1
typedef int  Status;
typedef int  VertexType;
typedef int  InfoType;
typedef int  SElemType;

typedef struct{
 SElemType *base;   /*棧底指針*/
 SElemType *top;    /*棧頂指針*/
 int stacksize;     /*棧的大小*/
}SqStack;

typedef struct ArcNode{
  int              adjvex;   /*該弧所指向的頂點的位置*/
  struct ArcNode   *nextarc;    /*指向一下條弧的指針*/
  InfoType         info;     /*該弧相關信息*/
}ArcNode;

typedef struct VNode{
    VertexType    data;   /*頂點信息*/
    ArcNode       *firstarc;   /*指向第一條依附該頂點的弧的指針*/
}VNode,AdjList[MAX_VERTEX_NUM];

typedef struct{
    AdjList   vertices;
    int       vexnum,arcnum;     /*圖當前的頂點數和弧數*/
    int       kind;              /*圖的種類標志*/
}ALGraph;

int indegree[MAX_VERTEX_NUM];

Status InitStack(SqStack &S)        //初始化棧
{
 S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
 if(!S.base) exit(OVERFLOW);
 S.top=S.base;
 S.stacksize=STACK_INIT_SIZE;
 return OK;
}

Status GetTop(SqStack &S,SElemType &e)    //取棧頂元素
{
 if(S.top==S.base) return ERROR;
 e=*(S.top-1);
 return OK;
}

Status Push(SqStack &S,SElemType e1)      //進棧操作
{
 if(S.top-S.base>=S.stacksize){
  S.base=(SElemType *)realloc(S.base,
    (S.stacksize+STACKINCREMENT)*sizeof(SElemType));
  if(!S.base) exit(OVERFLOW);
  S.top=S.base+S.stacksize;
  S.stacksize+=STACKINCREMENT;
 }
 *S.top++=e1;
 return OK;
}

Status Pop(SqStack &S,SElemType &e)         //出棧操作
{
 if(S.top==S.base) return ERROR;
 e=*(--S.top);
 return OK;
}

Status StackEmpty(SqStack S)     //判空操作
{
   if(S.top==S.base) 
    return 1;
   else 
    return 0;
}

int LocateVex(ALGraph &G,VertexType v)      /*返回頂點v在G中下標*/
{
  int i;
  for(i=0;i<G.vexnum;i++)
    if(v==G.vertices[i].data)   return i;

  return -1;
}

ALGraph Build_ALG_DN()      /*創建一個有向網*/
{ ALGraph G;
  int i,j,k,v1,v2;
  ArcNode *p=NULL,*q=NULL;
  for(i=0;i<MAX_VERTEX_NUM;i++)
    G.vertices[i].firstarc=NULL;    /*初始化*/
  printf("請輸入頂點數:");
  scanf("%d",&G.vexnum);       /*輸入頂點數*/
  if(G.vexnum<0)
     {
       printf("錯誤\n");
       return G;
     }
  printf("請輸入邊數:");
  scanf("%d",&G.arcnum);    /*輸入邊數*/
  if(G.arcnum<0)
     {
       printf("錯誤\n");
       return G;
     }
  for(i=0;i<G.vexnum;i++)    /*輸入頂點序列*/
    {
      printf("請輸入頂點信息: ");
      scanf("%d",&G.vertices[i].data);
    }
  for(i=0;i<G.arcnum;i++)    /*輸入邊的信息*/
    {
      printf("請輸入邊的信息(v1,v2):");
      scanf("%d,%d,%d",&v1,&v2);
      j=LocateVex(G,v1),k=LocateVex(G,v2);   /*獲取v1和v2在G中的位置*/
      if(j<0||k<0||j==k)
        {
          printf("ERROR!!\n");
          i--;continue;
        }  /*  如果頂點輸入錯誤,繼續     */
      p=(ArcNode *)malloc(sizeof(ArcNode));     /*分配結點*/
      p->adjvex=k;   p->nextarc=NULL;
      if(!G.vertices[j].firstarc)  G.vertices[j].firstarc=p;     /*p是v1的第一條弧*/
      else {
        for(q=G.vertices[j].firstarc;q->nextarc;q=q->nextarc);   /*找到鏈表的最后一個結點*/
        q->nextarc=p;
        }
      
    }
  return G;
}

Status Insert_Vertex_ALGraph(ALGraph &G)     /*插入一個頂點*/
{
  char a;
  char c;
  c='y';
  while(c=='y')
  {
    printf("請輸入頂點信息:");
    scanf("%d",&a);
    G.vertices[G.vexnum++].data=a;              /*插入頂點,頂點數加1*/
    printf("你還要插入頂點嗎?(y/n)?");
    scanf("%s",&c);
  }
  return OK;
}

Status Insert_Arc_ALGraph(ALGraph &G)  /*插入一條邊*/
{
  int j,k;
  char v1,v2,c;
  ArcNode *p,*q;
  c='y';    
  while(c=='y')              /*判斷是否插入邊*/
  {
     printf("請輸入邊的信息(v1,v2):");
     scanf("%d,%d,%d",&v1,&v2);             /*輸入邊的信息(頂點)*/
     j=LocateVex(G,v1);  k=LocateVex(G,v2);
     if(j<0||k<0||j==k){printf("ERROR!!\n");   continue;}    /*如果頂點不屬于G,繼續*/
     p=(ArcNode *)malloc(sizeof(ArcNode));     /*分配一個結點*/
     p->adjvex=k;  p->nextarc=NULL;
     if(!G.vertices[j].firstarc)  G.vertices[j].firstarc=p;  /*如果v1沒有邊,插入為第一條邊*/
     else                                           /*如果v1有邊,將新邊插到最后一個結點后*/
     {
       for(q=G.vertices[j].firstarc;q->nextarc;q=q->nextarc);
         q->nextarc=p;
     }
  G.arcnum++;
     printf("你還要插入邊嗎?(y/n)");
     scanf("%s",&c);
  }
  return OK;
}
Status FindInDegree(ALGraph G,int indegree[])   //對有向圖的各個頂點求入度
{
  int i,k;
  ArcNode *p;
  for(i=0;i<G.vexnum;i++)
  {
   if(G.vertices[i].firstarc)    
   {
    p=G.vertices[i].firstarc;
    k=p->adjvex;
    indegree[k]=1;
    while(p->nextarc)
    {
     p=p->nextarc;
     k=p->adjvex;
     ++indegree[k];
    }//while
   }//if
  }//for
  return OK;
}
Status TopologicalSort(ALGraph &G)
{    //輸出有向圖無環圖的拓撲有向序列,若有回路,返回錯誤。
   int i,count,k;
   
   ArcNode *p;
   SqStack S;
   FindInDegree(G,indegree);    //對各頂點求入度
   InitStack(S);
   for(i=0;i<G.vexnum;i++)
    if(!indegree[i])   Push(S,i);   //0入度頂點進棧
   count=0;
   while(!StackEmpty(S))   //棧非空
   {
    Pop(S,i);
    printf("  %d   ",G.vertices[i].data);
    count++;  //輸出i號頂點,計數加一
    for(p=G.vertices[i].firstarc;p;p=p->nextarc)
    {
     k=p->adjvex;
     if(!(--indegree[k]))   Push(S,k);  //i號頂點的每一個鄰接點入度減一,若減后為零,入棧
    }//for
   }//while
   if(count<G.vexnum)   return ERROR;    //如果輸出的頂點數小于圖的頂點數,則有向圖內有環,返回錯誤
   else    return OK;
}

 

int main()
{
  int i;
  int c=1;
  ALGraph G;
  ArcNode *p;
  printf("本程序將建立一個用鄰接表方式存儲的有向圖,可以進行插入頂點或邊的操作,\n可以輸出有向圖的信息或輸出該有向圖的拓撲有向序列。\n請按任意鍵繼續\n");
  getch();
  system("cls");
  printf("1.創建有向圖:(第一次請先執行這一步!)\n");
  system("cls");
  printf("========創建有向圖==========\n");
  printf("所有的輸入都為整數,邊的輸入方式為輸入該邊由哪個頂點指向哪個頂點,\n兩個頂點用“,”隔開。\n");
  G=Build_ALG_DN();
  printf("請按任意鍵繼續選擇操作。\n");
  getch();
  while(c!=0)
  {   
   system("cls");
   printf("1.插入頂點\n");
   printf("2.插入邊\n");
   printf("3.輸出有向圖的信息(頂點和邊)\n");
   printf("4.輸出有向圖的拓撲有向序列\n");
   printf("0.退出\n");
   printf("請選擇你要進行的操作:");
   scanf("%d",&c);
   switch(c)
   {
    case 1:
     system("cls");
     printf("========插入頂點===========\n");
           Insert_Vertex_ALGraph(G);   /*插入頂點*/
     printf("請按任意鍵繼續選擇操作。\n");
     getch();
     break;
       case 2:
     system("cls");
     printf("========插入邊==========\n");
     Insert_Arc_ALGraph(G);     //插入邊
     printf("請按任意鍵繼續選擇操作。\n");
     getch();
     break;
    case 3:
     system("cls");
     printf("========輸出有向圖=========\n");
           for(i=0;i<G.vexnum;i++)     //輸出頂點的信息
     {
              printf("%d  ",G.vertices[i].data);
     }
     printf("\n");
           for(i=0;i<G.vexnum;i++)  //輸出邊的信息
     {
              for(p=G.vertices[i].firstarc;p;p=p->nextarc)
              printf("%d-->%d  ",G.vertices[i].data,G.vertices[p->adjvex].data);
     }
           printf("\n");
           printf("\n請按任意鍵繼續選擇操作。\n");
     getch();
     break;
    case 4:
     system("cls");
     printf("========輸出有向圖的拓撲有向序列===========\n");
     if(!TopologicalSort(G))
      printf("\n有向圖中有回路,錯誤\n");
     printf("\n請按任意鍵繼續選擇操作。\n");
     getch();
     break;
    case 0:
     break;
    default:
     printf("\n你的選擇是錯誤的!\n");
     getch();
     break;
   }//switch
  }//while
  printf("\n歡迎下次再來……^_^\n");
  getch();
  return 0;
}

 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丰满亚洲少妇av| 久久99精品久久久久久| 久久精品视频免费| 欧美一区二区三区婷婷月色| 欧美日韩情趣电影| 欧美日韩国产一级| 欧美一卡二卡在线| 精品国产电影一区二区| 久久久91精品国产一区二区精品| 精品国产乱码久久久久久久久 | 一区二区高清免费观看影视大全| 国产亚洲综合在线| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 亚洲国产欧美日韩另类综合 | 国产精品美女久久久久aⅴ| 中文字幕乱码久久午夜不卡 | 91精品国产91久久久久久一区二区| 在线一区二区三区四区| 欧美日本一区二区在线观看| 欧美网站一区二区| 日韩欧美二区三区| 久久精品视频在线看| 中文字幕制服丝袜一区二区三区| 亚洲精品一二三| 丝袜亚洲另类欧美| 国产传媒日韩欧美成人| 在线免费亚洲电影| 精品久久久网站| 成人免费视频在线观看| 午夜欧美视频在线观看 | 国产视频一区在线播放| 自拍偷拍欧美精品| 蜜桃在线一区二区三区| 粉嫩在线一区二区三区视频| 欧洲av在线精品| 欧美精品一区二区三区高清aⅴ| 国产精品福利av| 热久久久久久久| 97超碰欧美中文字幕| 欧美一级欧美一级在线播放| 国产精品免费视频网站| 青青草97国产精品免费观看 | 日韩av中文在线观看| 国产一区二区精品久久91| 在线观看成人小视频| 久久亚洲春色中文字幕久久久| 亚洲欧美电影一区二区| 日本成人中文字幕在线视频 | 欧美日韩一区二区三区在线看| ww亚洲ww在线观看国产| 午夜精品视频一区| 99re免费视频精品全部| 久久综合久久鬼色中文字| 亚洲午夜免费视频| 一本色道久久综合亚洲aⅴ蜜桃| 精品伦理精品一区| 日本中文在线一区| 欧美日韩五月天| 亚洲免费av观看| 成人午夜碰碰视频| 久久网这里都是精品| 日韩av中文字幕一区二区三区| 一本久道久久综合中文字幕| 久久久久久久久久久电影| 美美哒免费高清在线观看视频一区二区 | 99视频一区二区三区| 久久久美女毛片| 久久成人精品无人区| 91精品国产一区二区三区蜜臀| 亚洲欧美激情视频在线观看一区二区三区 | 爽好久久久欧美精品| 一本大道久久a久久精二百| 国产精品大尺度| 色综合久久久久综合体桃花网| 国产精品福利影院| 99精品视频在线免费观看| 亚洲国产精品成人综合色在线婷婷| 九色综合国产一区二区三区| 欧美另类变人与禽xxxxx| 亚洲成年人网站在线观看| 欧美性生交片4| 香蕉影视欧美成人| 欧美一级国产精品| 久久国产精品免费| 久久精品综合网| 99精品欧美一区二区三区综合在线| 亚洲天堂久久久久久久| 一本一道久久a久久精品| 亚洲国产成人tv| 欧美一级生活片| 国产成人免费9x9x人网站视频| 中文成人av在线| 欧美在线|欧美| 日本不卡一区二区| 日本一区二区三区dvd视频在线| 粗大黑人巨茎大战欧美成人| 日韩一区日韩二区| 欧美久久久久久蜜桃| 久久国产精品色婷婷| 国产精品传媒视频| 欧美裸体一区二区三区| 国产乱码精品一区二区三区忘忧草 | 欧美日韩一区高清| 精品一区二区国语对白| 国产欧美精品区一区二区三区| 色琪琪一区二区三区亚洲区| 首页国产欧美久久| 欧美国产欧美综合| 欧美日韩国产影片| 高清不卡一二三区| 五月激情丁香一区二区三区| 26uuu精品一区二区在线观看| 99在线热播精品免费| 丝袜脚交一区二区| 亚洲日本va午夜在线电影| 欧美一区二区三区免费视频| 成人动漫精品一区二区| 日韩在线a电影| 亚洲免费观看高清完整版在线 | 欧美日韩国产一级| 国产 欧美在线| 日韩av不卡在线观看| 亚洲欧美成人一区二区三区| 精品国产伦一区二区三区免费| 在线精品亚洲一区二区不卡| 久久爱另类一区二区小说| 亚洲综合另类小说| 成人免费一区二区三区视频| 精品国产区一区| 在线91免费看| 欧美性感一区二区三区| 成人av电影免费在线播放| 国内精品写真在线观看| 无吗不卡中文字幕| 亚洲成人av电影| 一区二区三区欧美日| 中文字幕一区二区三区在线不卡 | 成人av网站在线| 国产呦萝稀缺另类资源| 男女激情视频一区| 亚洲一二三区在线观看| 一区二区三区在线播| 亚洲天堂网中文字| 亚洲日本欧美天堂| 亚洲三级在线观看| 亚洲三级电影网站| 亚洲人成精品久久久久久| 国产精品久久久久久久久晋中| 久久久久久久免费视频了| 久久先锋影音av鲁色资源网| 精品国产一区二区在线观看| 欧美成人一区二区三区| 欧美一激情一区二区三区| 日韩一区二区中文字幕| 日韩一区二区免费在线观看| 91精品国产高清一区二区三区蜜臀| 欧美撒尿777hd撒尿| 欧美精品乱码久久久久久| 欧美精品第1页| 日韩欧美123| 26uuu国产电影一区二区| 国产午夜精品久久| 亚洲欧洲三级电影| 亚洲午夜影视影院在线观看| 亚洲国产美女搞黄色| 午夜a成v人精品| 国模大尺度一区二区三区| 国产成人av网站| 91麻豆视频网站| 91.xcao| 欧美激情在线观看视频免费| 综合久久久久久| 日日骚欧美日韩| 国产福利91精品一区二区三区| 成人蜜臀av电影| 欧美日韩你懂的| 久久久久久久久久久久久夜| 中文字幕一区二区三区四区不卡 | 一区二区不卡在线播放| 同产精品九九九| 精品在线一区二区| 99国产精品久久久久久久久久久| 日本久久精品电影| 欧美岛国在线观看| 日本一区二区免费在线| 一区二区三区国产精华| 麻豆精品久久精品色综合| 成人免费精品视频| 欧美老人xxxx18| 中文字幕不卡三区| 日韩不卡一二三区| av不卡免费电影| 91精品国产综合久久久久久久 | 亚洲免费成人av| 精品一区二区三区不卡| 在线影视一区二区三区| 久久久久久久久97黄色工厂| 亚洲一级片在线观看| 国产成人av一区二区三区在线| 欧美日本在线视频|