算法导论 第22章 22.1-4

来源:互联网 发布:北京渠道网络怎么样 编辑:程序博客网 时间:2024/05/20 18:20
#include<iostream>using namespace std;typedef struct Gnode{int index;struct Gnode *next;}Gnode;int N,M;//N表示顶点,M表示边int main(){scanf("%d %d",&N,&M);int i,j;bool *visited=new bool[N];Gnode *G=new Gnode[N];for(i=0;i<N;i++){G[i].index=i;G[i].next=NULL;visited[i]=false;}int a,b;for(i=0;i<M;i++){scanf("%d %d",&a,&b);if(a==b)continue;Gnode *temp=&G[a];while(temp->next!=NULL)temp=temp->next;Gnode *temp2=new Gnode;temp2->index=b;temp2->next=NULL;temp->next=temp2;temp2=NULL;temp2=new Gnode;temp2->index=a;temp2->next=NULL;temp=&G[b];while(temp->next!=NULL)temp=temp->next;temp->next=temp2;}for(i=0;i<N;i++){visited[G[i].index]=true;Gnode *temp=&G[i];while(temp->next!=NULL){Gnode *temp1=temp->next;if(visited[temp1->index]){temp->next=temp1->next;free(temp1);}else{visited[temp1->index]=true;temp=temp1;}}temp=&G[i];while(temp!=NULL){visited[temp->index]=false;temp=temp->next;}}for(i=0;i<N;i++){printf("%d",G[i].index);Gnode *temp=&G[i];while(temp->next!=NULL){temp=temp->next;printf(" -> %d",temp->index);}printf(" -> ^\n");}return 0;}

测试数据:

4 12
0 0
0 1
0 1
0 1
0 2
1 2
1 2
2 1
2 3
2 3
2 3
3 2

0 0
原创粉丝点击