之所以是一条路径,因为无向图可能从某点出发有很多条回归路径,根据输入节点的顺序不同,呢么建好的图就不同,所以路径不是最短的,而是充分体现了深搜的特点:找到一条赶紧就撤。放码子: 不准偷转! #include<iostream> #include<cstring> #define bie_tou_zhuan_pzjay_wenzhang false; using namespace std; const int nax=100; bool use[nax]; int matrix[nax][nax],path[nax]; struct adj { int adj_num; int val; adj *next; }; typedef struct vex { int id; adj *first; }peak[nax]; struct Graph { peak gg; int v,e; }; void creat_adjlist(Graph *g) { int i; adj *tmp; scanf("%d%d",&g->v,&g->e); for(i=0;i<g->v;++i) { g->gg[i].id=i; g->gg[i].first=NULL; } int beg; for(i=0;i<g->e;++i) { tmp=new adj; scanf("%d%d",&beg,&tmp->adj_num); tmp->next=g->gg[beg].first; tmp->val=1; g->gg[beg].first=tmp; } } void DFS(Graph *g,int beg,int end,int len,int coun) { int i; use[beg]=true; adj *tmp; coun++; path[coun]=beg; if(beg==end && coun==len) { for(i=0;i<=coun;++i) printf("%d ",path[i]); printf("/n"); } tmp=g->gg[beg].first;//转到邻接点 int tv;//记录临接顶点 while(NULL!=tmp)//深搜之 { tv=tmp->adj_num; if(!use[tv]) DFS(g,tv,end,len,coun); tmp=tmp->next;//转到beg的下个邻接点 } use[beg]=false;//回溯,找下条符合条件的路径 --coun; } int main() { Graph *g; g=new Graph; memset(use,false,sizeof(use)); int beg,end,len; creat_adjlist(g); scanf("%d%d%d",&beg,&end,&len); DFS(g,beg,end,len-1,-1); return bie_tou_zhuan_pzjay_wenzhang; }