6 8
Case 1: 1 4 3 2 5 6 1 6 5 2 3 4 Case 2: 1 2 3 8 5 6 7 4 1 2 5 8 3 4 7 6 1 4 7 6 5 8 3 2 1 6 7 4 3 8 5 2
#include <stdio.h> #include <string.h> #define MAX 25 bool visited[MAX] ; int n , ans[MAX] ; bool prime[2*MAX]; void DFS(int num) { if(num == n) { if(!prime[ans[num-1]+1]) return ; for(int i = 0 ; i < n ; ++i) { printf("%d",ans[i]); if(i != n-1) { printf(" "); } } printf("\n") ; return ; } else { for(int i = 1 ; i <= n ; ++i) { if(!visited[i] && prime[i+ans[num-1]]) { visited[i] = true ; ans[num] = i; DFS(num+1); visited[i] = false ; } } } } int main() { for(int i = 2 ; i < 51 ; ++i) prime[i] = true ; prime[0]=prime[1]=false; prime[2] = true ; for(int i = 2 ; i < 51; ++i) { for(int j = 2 ; j*i < 51 ; ++j) { prime[i*j] = false ; } } ans[0] = 1 ; int c=1; while(~scanf("%d",&n)) { memset(visited,0,sizeof(visited)); visited[1] = true ; printf("Case %d:\n",c++); DFS(1); printf("\n"); } return 0 ; }
hdu 1016 Prime Ring Problem DFS解法 纪念我在杭电的第一百题
原文:http://blog.csdn.net/lionel_d/article/details/43765225