组合数问题--------一种新的 搜索 思路
和那个戒指 比较相像 可以说这都是相通的 ..
这个想法挺不错的 .....
1 // 利用vector不定长数组 构图 然后就知道 某个节点相邻的 所有节点 2 #include<stdio.h> 3 #include<string.h> 4 #include<math.h> 5 #include<iostream> 6 #include<algorithm> 7 #include<queue> 8 #include<vector> 9 #include<set> 10 #include<stack> 11 #include<string> 12 #include<sstream> 13 #include<map> 14 #include<cctype> 15 using namespace std; 16 int n,m,date[12],visited[12]; 17 void DFS(int s,int q) 18 { 19 if(q==m+1) 20 { 21 for(int i=1;i<=m;i++) 22 printf("%d",date[i]); 23 printf("\n"); 24 } 25 for(int i=n;i>=1;i--) 26 { 27 if(visited[i]) // 如果 已经用了 那么直接 就 开始 下一次 28 continue; 29 if(i<date[q-1]||q==1) // 现在 填的数字 一定要 比上一次的 小 30 { 31 date[q]=i; 32 visited[i]=1; 33 DFS(s,q+1); 34 visited[i]=0; 35 } 36 } 37 } 38 int main() 39 { 40 while(scanf("%d%d",&n,&m)!=EOF) 41 { 42 DFS(n,1); //现在最大的数字是 n 开始填 第一个坑 43 } 44 }