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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hdu 1016 Prime Ring Problem(DFS)

發布時間:2025/7/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 1016 Prime Ring Problem(DFS) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本題鏈接:點擊打開鏈接

本題大意:

? ? ? ? 輸入一個數n表示須要查找的數有n個,而且這些數連成一個環,隨意兩個相鄰的數之和都為素數。

解題思路:

? ? ? ? 就是從1開始對每一個點進行查找,符合條件的點就存到一個數組中,標記找過的點。查找完一次就進行輸出。然后取消標記繼續查找,直至將1~n中的點從小到大均查找一次。詳細請參考代碼:

#include<stdio.h> #include<string.h> int mark[22]; int num[22]; int prime_num[12]={2,3,5,7,11,13,17,19,23,29,31,37}; int n; int is_prime(int a) {for(int i=0;i<12;i++)if(a==prime_num[i])return 1;return 0; } void print_num() {for(int i=1;i<n;i++)printf("%d ",num[i]);printf("%d\n",num[n]); } int dfs(int per,int post,int flag)//三個變量依次為此位置。與此位置相連的下一個位置,num數組中存放的位置 {if(!is_prime(per+post))//若此位置與下一位置之和不是素數,則不滿足條件。返回 return 0;num[flag]=post;//若滿足條件,記下“下一個位置”到num數組中 if(flag==n&&is_prime(post+1))//若已查找到了n個數,而且第n個數與最先的位置1之和也為素數 {print_num();//則查找到一組,進行輸出 return 1;//結束此次查找 }mark[post]=1;//若還沒有查找完,則繼續查找,將已經找過的點標記 for(int i=2;i<=n;i++)if(!mark[i]&&dfs(post,i,flag+1))break;mark[post]=0;//查找完一次后。可能還存在其它序列,所以取消標記,使后面可繼續進行查找 return 0; } int main() {int t=1;while(scanf("%d",&n)!=EOF){for(int i=1;i<=n;i++){mark[i]=0;//標記該數是否使用過 }num[1]=1;//存放序列,1肯定在 printf("Case %d:\n",t++);if(n==1)printf("1\n");for(int i=2;i<=n;i++)//首先查找1的下一位 dfs(1,i,2);//2表示i在num數組中存放的位置 printf("\n");}return 0; }

總結

以上是生活随笔為你收集整理的hdu 1016 Prime Ring Problem(DFS)的全部內容,希望文章能夠幫你解決所遇到的問題。

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