0024 c++每日一题(深度优先)

Posted 码农小小李

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0024 c++每日一题(深度优先)相关的知识,希望对你有一定的参考价值。

今日题目

【题目描述】

A ring is composed of n (even number) circles as shown in diagram. Put natural numbers 1, 2, . . . , n into each circle separately, and the sum of numbers in two adjacent circles should be a prime. Note: the number of first circle should always be 1. 

输入】

n (0 < n ≤ 16) 

【输出】

The output format is shown as sample below. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the above requirements. You are to write a program that completes above process.

【样例输入】

 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

Mine程序

深度优先

#include <cstdio>#include <iostream>#include <cmath>using namespace std;int n,vis[20]={0},num[20];bool is_prime(int a){ if(a==2) return true; for(int i=2;i<=sqrt(a);i++) { if(a%i==0) return false; } return true;}void dfs(int x){ if(x<=n)  for(int i=2;i<=n;i++) { num[x]=i; if(is_prime(num[x-1]+num[x])&&vis[i]!=1) { vis[i]=1; dfs(x+1); vis[i]=0; } } else { if(is_prime(num[n]+1)) { for(int i=1;i<=n;i++) printf("%d ",num[i]); printf("\n");  } }}int main(){ int cas=1; while(cin>>n) { memset(vis,0,sizeof(vis)); num[1]=1; dfs(2); } return 0;}


以上是关于0024 c++每日一题(深度优先)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode每日一题——851. 喧闹和富有

每日一题 分割回文串(深度优先搜索)

力扣每日一题:993. 二叉树的堂兄弟节点(简单)

《LeetCode之每日一题》:216.二叉树的最大深度

leetcode 每日一题 93. 复原IP地址

LeetCode 每日一题 11028. 从先序遍历还原二叉树