zoukankan      html  css  js  c++  java
  • UVa 524 Prime Ring Problem【回溯】

    题意:给出n,把从1到n排成一个环,输出相邻两个数的和为素数的序列

    照着紫书敲的, 大概就是这个地方需要注意下,初始化的时候a[0]=1,然后dfs(1),从第1个位置开始搜

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<queue> 
     9 #include<algorithm>  
    10 #define mod=1e9+7;
    11 using namespace std;
    12 
    13 typedef long long LL;
    14 int a[1005],vis[1005],isp[1005];
    15 int n;
    16 
    17 void is_prime(){
    18     isp[1]=isp[0]=1;
    19     for(int i=2;i<=1005;i++){
    20         if(isp[i]==0){
    21             for(int j=i*2;j<=1005;j+=i)
    22             isp[j]=1;
    23         }
    24     }
    25 }
    26 
    27 void dfs(int cur){
    28     int i;
    29     if(cur==n&&!isp[a[0]+a[n-1]]){
    30         for( i=0;i<n-1;i++) printf("%d ",a[i]);
    31         printf("%d
    ",a[i]);
    32     }
    33     
    34     else for(i=2;i<=n;i++)
    35     if(!vis[i]&&!isp[i+a[cur-1]]){
    36         a[cur]=i;
    37         vis[i]=1;
    38         dfs(cur+1);
    39         vis[i]=0;
    40     }
    41 }
    42 
    43 int main(){
    44     int t=0;
    45     is_prime();
    46     while(cin>>n){
    47         memset(vis,0,sizeof(vis));
    48        a[0] = 1;
    49         vis[1] = 1;
    50         if(t) printf("
    ");
    51         printf("Case %d:
    ", ++t);
    52         dfs(1);
    53     }
    54     return 0;
    55 }
    View Code

    自己写的时候,直接是dfs(0),什么都输不出来,可是为什么是这样呢= = 学习回溯的第一题目 = = 再好好理解- -

  • 相关阅读:
    Microsoft Enterprise Library
    TCP拥塞控制算法内核实现剖析(三)
    Linux内核链表实现剖析
    sk_buff 剖析
    TCP拥塞控制算法内核实现剖析(一)
    set time zone Ubuntu
    xml listview
    VSTO rtm assembly
    Assembly and ActiveX
    input a long sentence in a single line of textbox
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4355027.html
Copyright © 2011-2022 走看看