程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 池子法 鄰接表建圖

池子法 鄰接表建圖

編輯:C++入門知識

[cpp] 
#include <stdio.h> 
#include <cstring> 
#define maxn 1000 
struct edge 

    int from,to,next,val; 
} e[maxn]; 
int first[maxn]; 
int main() 

    int n; 
    while(scanf("%d",&n)==1) 
    { 
        memset(first,-1,sizeof(first)); 
        for(int i=0; i<n; i++) 
        { 
            scanf("%d%d%d",&e[i].from,&e[i].to,&e[i].val); 
            e[i].next=first[e[i].from]; 
            first[e[i].from]=i; 
        } 
        for(int i=1; i<10; i++) 
        { 
            printf("以%d為起點的邊是:\n",i); 
            for(int u=first[i];u!=-1;u=e[u].next) 
            printf("%d %d %d\n",e[u].from,e[u].to,e[u].val); 
        } 
    } 
    return 0; 

 
一下為轉載、、 
#include<iostream> 
  #define Maxn 200 
  using namespace std; 
  struct edge{int from,to,weight,next;}e[Maxn];//存儲邊信息的結構體  
#include <stdio.h> 
#include <cstring> 
#define maxn 1000 
struct edge 

    int from,to,next,val; 
} e[maxn]; 
int first[maxn]; 
int main() 

    int n; 
    while(scanf("%d",&n)==1) 
    { 
        memset(first,-1,sizeof(first)); 
        for(int i=0; i<n; i++) 
        { 
            scanf("%d%d%d",&e[i].from,&e[i].to,&e[i].val); 
            e[i].next=first[e[i].from]; 
            first[e[i].from]=i; 
        } 
        for(int i=1; i<10; i++) 
        { 
            printf("以%d為起點的邊是:\n",i); 
            for(int u=first[i];u!=-1;u=e[u].next) 
            printf("%d %d %d\n",e[u].from,e[u].to,e[u].val); 
        } 
    } 
    return 0; 

 
一下為轉載、、 
#include<iostream> 
  #define Maxn 200 
  using namespace std; 
  struct edge{int from,to,weight,next;}e[Maxn];//存儲邊信息的結構體  
 int first[Maxn];//起點為下標存儲(e中邊的位置)  
 int main() 
 { 
     int edges;//邊數  
     memset(first,-1,sizeof(first)); 
     //因為剛開始first不指向任何一條邊的下標,所以first都為-1  
     cin>>edges;//邊數  
     for(int i=0;i<edges;i++) 
     { 
         cin>>e[i].from>>e[i].to>>e[i].weight;//起點 終點 權重  
         e[i].next=first[e[i].from];first[e[i].from]=i;//不容易理解的地方 
         /*
         利用first數組存儲的是最新的(以數組下標為起點的)邊的下標 
         並且該條邊的next指向的是同樣以數組下標為起點的下一條邊的下標 
         直到下一條邊的next=-1(即將所有以數組下標為起點的邊都遍歷了一遍) 
         */ 
     } 
     for(int u=1;u<10;u++)//輸出圖  
     { 
         cout<<"以"<<u<<"為起點的所有邊的信息:"<<endl;  
         for(int v=first[u];v!=-1;v=e[v].next)//遍歷以u為起點的所有邊的信息  
             cout<<e[v].from<<" "<<e[v].to<<" "<<e[v].weight<<endl; 
     } 
     return 0; 
 } 
 /*
 5
 3 4 6
 3 7 8
 1 3 6
 2 4 7
 3 5 1
 */</span> 
 
 
 int first[Maxn];//起點為下標存儲(e中邊的位置)  
 int main() 
 { 
     int edges;//邊數  
     memset(first,-1,sizeof(first)); 
     //因為剛開始first不指向任何一條邊的下標,所以first都為-1  
     cin>>edges;//邊數  
     for(int i=0;i<edges;i++) 
     { 
         cin>>e[i].from>>e[i].to>>e[i].weight;//起點 終點 權重  
         e[i].next=first[e[i].from];first[e[i].from]=i;//不容易理解的地方 
         /*
         利用first數組存儲的是最新的(以數組下標為起點的)邊的下標 
         並且該條邊的next指向的是同樣以數組下標為起點的下一條邊的下標 
         直到下一條邊的next=-1(即將所有以數組下標為起點的邊都遍歷了一遍) 
         */ 
     } 
     for(int u=1;u<10;u++)//輸出圖  
     { 
         cout<<"以"<<u<<"為起點的所有邊的信息:"<<endl;  
         for(int v=first[u];v!=-1;v=e[v].next)//遍歷以u為起點的所有邊的信息  
             cout<<e[v].from<<" "<<e[v].to<<" "<<e[v].weight<<endl; 
     } 
     return 0; 
 } 
 /*
 5
 3 4 6
 3 7 8
 1 3 6
 2 4 7
 3 5 1
 */</span> 
作者:ehi11

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved