zoukankan      html  css  js  c++  java
  • Prime Ring Problem -- 第一个真正意义上的 搜索

    这个搜索............搜的我头都大了.......不过还是 懂了那么一点点...哈哈

    从3/7晚上  做到3/8晚上------从女生到妇女  我都用来做着一道题了.........

     所谓的 深度优先搜索   还是   递归调用自身                            关键思想是   

    在上面写出  满足  条件的  情况  例如 if 然后怎么怎么  然后 不满足的话 继续 调整  一点一点继续  调用尝试   如果发现   不合适的话 在调用的 后面        重新 将数据还原成   没有 尝试  时  的 样子       ,,,,,,just  so so  

    明天据需努力    先开始  N 皇后问题     听说 和这一道题    挺像的    .      

        奇数的话除了 1  其余的都是无解 

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #include<set>
    #include<stack>
    #include<string>
    #include<sstream>
    #include<map>
    #include<cctype>
    using namespace std;
    bool isPrime(int num)
    {
        if (num == 2 || num == 3)
        {
            return true;
        }
        if (num % 6 != 1 && num % 6 != 5)
        {
            return false;
        }
        for (int i = 5; i*i <= num; i += 6)
        {
            if (num % i == 0 || num % (i+2) == 0)
            {
                return false;
            }
        }
        return true;
    }
    int n,a[25],mark=0,visited[25];
    void DFS(int m)
    {
        if(m==n+1&&isPrime(a[m-1]+1))  //戒指 填充完毕 , 比且最后一个数字和第一个数字之和 也是素数
        {
            for(int i=1;i<n;i++)
                printf("%d ",a[i]);
            printf("%d
    ",a[n]);
            mark=1;
        }
        for(int i=2;i<=n;i++)
        {
            if(visited[i]==0)   // 这个数字 没有用过
            {
                if(isPrime(a[m-1]+i))  //  如果上一个和这一个 之和是素数的话
                {
                    a[m]=i;
                    visited[i]=1;
                    DFS(m+1);
                    visited[i]=0;
                }
            }
        }
    }
    int main()
    {
        int count1=0;
        while(scanf("%d",&n),n)
        {
            printf("Case %d:
    ",++count1);
            if(n%2==1&&n!=1)
            {
                printf("No Answer
    ");
                continue;
            }
            mark=0;
            a[1]=1;   //第一个位置上  一定 是 1
            memset(visited,0,sizeof(visited));
            visited[1]=1;
            DFS(2);  //  直接 开始填第二个坑 .
            if(mark==0)
                printf("No Answer
    ");
        }
        return 0;
    }

     一直会有这样那样的错误 , 归结了一下还是不细心造成的 . . . . . . . . . . . . .      一点一点的改吧 .

  • 相关阅读:
    绘制饼状图
    柱状图使用实例
    柱状图颜色区分
    bar函数与barh函数
    绘制柱状图
    绘制不同样式不同颜色的线
    Windows10没有修改hosts文件权限
    Lucene入门学习
    Kafka学习笔记
    Elasticsearch学习笔记(强推)
  • 原文地址:https://www.cnblogs.com/A-FM/p/5255623.html
Copyright © 2011-2022 走看看