废话不说,放码子: #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]; int v,e; void creat_matrix() { scanf("%d%d",&v,&e); int i; int beg,end; for(i=0;i<e;++i) { scanf("%d%d",&beg,&end); matrix[beg][end]=1; } } void find_shortcut(int end,int tmp) { int t; if(path[tmp]==end)//找到一条简单路径 { for(t=0;t<=tmp;++t) printf("%d ",path[t]); printf("/n"); } else { t=0; while(t<v) { if(matrix[path[tmp]][t]==1 && !use[t])//联通并且没走过 { use[t]=true; path[tmp+1]=t; find_shortcut(end,tmp+1);//走到南墙不回头 use[t]=false;//回溯 } ++t;//尝试下个邻接点 } } } int main() { memset(matrix,0,sizeof(matrix)); memset(use,0,sizeof(use)); creat_matrix(); int beg,end; scanf("%d%d",&beg,&end); path[0]=beg; find_shortcut(end,0); return bie_tou_zhuan_pzjay_wenzhang; } 至于输出所有指定顶点间的所有简单路径,代码跟上面神似,就不写了。(只要改动一下输出条件就可以咯) 转载注明出处!