#include<stdio.h> #include<stdlib.h> #define MAXVEX 60 typedef int WeightType; typedef int Elemtype; typedef struct EdgeNode { int adjvex; int data; WeightType weight; struct EdgeNode *next; }EdgeNode; typedef struct VexNode { EdgeNode *firstarc; }VexNode, AdjList[MAXVEX]; typedef struct GraphADJ{ AdjList adjlist; int numvex, numedge; }GraphADJ; void InitGraph(GraphADJ *G,int n) { int i; G->numvex = n; for(i=0; i<n; i++) { G->adjlist[i].firstarc= NULL; } } void InsertEdge(GraphADJ *G,int s,int t,int w) { EdgeNode *newn = (EdgeNode *)malloc(sizeof(EdgeNode)); newn->adjvex = t; newn->weight = w; newn->next=G->adjlist[s].firstarc; G->adjlist[s].firstarc=newn; } int LocateEdge(GraphADJ G,int s,int t) { EdgeNode *p = G.adjlist[s].firstarc; while(p!=NULL) { if(p->adjvex == t) return 0; p = p->next; } return 1; } void Create(GraphADJ *G,int n) { int i,j,x,k=0,t; int a[60][60],visit[60],b[60]; InitGraph(G,n); for(i=0;i<n;i++) visit[i]=0; for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); for(i=0;i<n;i++) for(j=n-1;j>=0;j--) { if(a[i][j]==1) InsertEdge(G,i,j,1); } EdgeNode *p; i=0; while(k==0) { j=0,t=0; printf("%d ",i); do { p=G->adjlist[i].firstarc; visit[i]=1; while(p!=NULL) { i=p->adjvex; if(visit[i]!=1) { b[j++]=i; visit[i]=1; printf("%d ",i); } p=p->next; } i=b[t]; b[t]=-1; t++; }while(t<=j); for(i=0;i<n;i++) { if(visit[i]==1) k=1; else { k=0; break; } } } } void main() { int n; scanf("%d",&n); GraphADJ G; Create(&G,n); printf("\n"); } /************************************************************** Problem: 2160 User: admin Language: C Result: Accepted Time:16 ms Memory:1144 kb ****************************************************************/