uva 524(Prime Ring Problem UVA - 524 )
阿新 • • 發佈:2018-11-10
dfs練習題,我素數打表的時候j=i了,一直沒發現實際上是j=i*i,以後可記住了。還有最後一行不能有空格。。。昏迷了半天
我的程式碼(紫書上的演算法)
#include <bits/stdc++.h> using namespace std; int bk[110]; int num[110]; int vis[110]; int n; void db() { for(int i=2;i*i<=100;i++) if(!bk[i]) for(int j=i*i;j<=100;j+=i) bk[j]=1; } void dfs(int cur) { if(cur==n&&!bk[num[n-1]+num[0]]) { for(int i=0;i<n;i++) { cout<<num[i]; if(i<n-1) cout<<" "; } cout<<endl; } else for(int i=2;i<=n;i++) { //cout<<vis[i]<<" "<<bk[i+num[cur-1]]<<endl; if(!vis[i]&&!bk[i+num[cur-1]]) { num[cur]=i; vis[i]=1; dfs(cur+1); vis[i]=0; } } } main() { db(); int cas=0; num[0]=1; int ft=0; while(cin>>n) { if(ft) cout<<endl; printf("Case %d:\n",++cas); dfs(1); ft=1; } }