日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU1016 Prime Ring Problem dfs+回溯

發布時間:2024/10/6 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU1016 Prime Ring Problem dfs+回溯 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊打開鏈接

Prime Ring Problem

Time Limit: 4000/2000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 62693????Accepted Submission(s): 26947

?

Problem Description

A ring is compose of n circles as shown in diagram. Put natural number 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.

Input

n (0 < n < 20).

Output

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. Print solutions in lexicographical order.
You are to write a program that completes above process.
Print a blank line after each case.

Sample Input

6

8

Sample Output

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

Source

Asia 1996, Shanghai (Mainland China)

Recommend

JGShining???|???We have carefully selected several similar problems for you:??1312?1072?1242?1253?1181

?

題意:

輸入一個數n,把1到n的自然數放到一個環里,相鄰兩個數之和為素數,第一個數必須是1

思路:

素數打表+dfs回溯

因為第一個數是1,所以從2開始搜索

如果這個數沒用過,并且這個數和上一個放到環里的數之和是素數,則把這個數字放入環中

#include<bits/stdc++.h> #include<iostream> using namespace std; int a[20],vis[20],isprime[45]={0},n; void get_prime() {int i,j;for(i=2;i<8;i++)if(!isprime[i])for(j=i*i;j<45;j+=i)isprime[j]=1; }//把40以內的素數打出來.0代表是素數 int dfs(int step) {int i;if(step==n+1&&!isprime[a[n]+a[1]])//深搜到結束條件{for(i=1;i<n;i++)printf("%d ",a[i]);printf("%d\n",a[n]);return 0;}for(i=2;i<=n;i++){if(!vis[i]&&!isprime[i+a[step-1]])//如果這個數沒用過,并且這個數和上一個放到環里的數之和是素數{a[step]=i;vis[i]=1;dfs(step+1);vis[i]=0;//回溯}} } int main() {int k=1;a[1]=1;get_prime();while(scanf("%d",&n)!=EOF){memset(vis,0,sizeof(vis));printf("Case %d:\n",k++);dfs(2);printf("\n");} }

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的HDU1016 Prime Ring Problem dfs+回溯的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。