인접 표 기반 그림 만 들 기 (방향 도 + 방향 도 없 음)

1985 단어 도 론
그림 의 표시 (구축) 는 두 가지 방법 이 있다.
① 인접 행렬: A (i, j) = 1 은 i, j 에 한 변 이 존재 하고 공간 복잡 도 O (n ^ 2), 밀도 도 를 나타 낸다.
② 인접 표: 존재 하 는 변 만 기록 하고 Vector + List 의 데이터 구조, 희소 도
인접 행렬 의 그림 은 여기 서 군말 하지 않 고 다음 에 우 리 는 인접 표 의 그림 을 살 펴 보 자.
< 1 > 유방 향도
머리 가 노드 를 삽입 하 는 과정 을 잘 이해 하 세 요.
int  n,m;//n      ,m      


struct LinkNode//    
{
	int vex; //            
	LinkNode* next;
};
struct Node//   
{
	int data;
	LinkNode* head;//     
} Adj[maxn];

//     (     )Vector+List
void createLink(){
  LinkNode *ptr1,*ptr2;//         
  for(int i=1;i<=n;i++) Adj[i].head=NULL;
  for(int i=1;i<=m;i++){
     ptr1=new LinkNode;
     scanf("%d",&ptr1->vex);
    //     ,    ,    head   
     ptr2=new LinkNode;
     scanf("%d",&ptr2->vex);
     //            ,    
     ptr2->next=Adj[ptr1->vex].head;
     Adj[ptr1->vex].head=ptr2;
  }
}
int main()
{
	//freopen("input.txt","r",stdin);
    while(scanf("%d%d",&n,&m)!=EOF){  //     ,   
     createLink();
    }
	return 0;
}

< 2 > 무방 향도
방향 도 기반 으로 두 번 삽입 하면 됩 니 다.
int  n,m;//n      ,m      

struct LinkNode//    
{
	int vex; //            
	LinkNode* next;
};
struct Node//   
{
	int data;
	LinkNode* head;//     
} Adj[maxn];

//     (     )Vector+List
void createLink(){
  LinkNode *ptr1,*ptr2;//         
  for(int i=1;i<=n;i++) Adj[i].head=NULL;
  for(int i=1;i<=m;i++){
     ptr1=new LinkNode;
     scanf("%d",&ptr1->vex);
    //     ,    ,    head   
     ptr2=new LinkNode;
     scanf("%d",&ptr2->vex);
     ptr2->next=Adj[ptr1->vex].head;
     Adj[ptr1->vex].head=ptr2;
     //        
     ptr1->next=Adj[ptr2->vex].head;
     Adj[ptr2->vex].head=ptr1;
  }
}
int main()
{
    //freopen("input.txt","r",stdin);
    while(scanf("%d%d",&n,&m)!=EOF){  //     ,   
     createLink();
    }
	return 0;
}

좋은 웹페이지 즐겨찾기