杭电1016 素数环 java代码实现
来源:互联网 发布:linux下的tmp目录 编辑:程序博客网 时间:2024/05/19 20:47
题目链接点击打开链接
这是我自己所学会使用DFS所做的第一个题目,如有不好的地方或者错误,希望大神多多指教。
题目大意为:输出指定个数的素数环,素数环为一个环中相邻的2个数之和都为素数。
基本解题思路:使用DFS算法
代码实现如下:
import java.util.*;class Main{public static void main(String args[]){Scanner sc=new Scanner(System.in);int t=1;while(sc.hasNext()){int n=sc.nextInt();boolean vis[]=new boolean[n+1];//标记数组,用于标记该数是否被用过int a[]=new int[n];//装素数环的数组for(int i=1;i<=n;i++){vis[i]=true;//初始化标记数组,true为该书未被使用过}System.out.println("Case "+(t++)+":"); //输出格式Case t:a[0]=1;//令素数环第一个数为1vis[1]=false;//标记数字1已经被用过dfs(vis,a,1,n);//开始搜索System.out.println();}} public static void dfs(boolean vis[],int a[],int i,int n){if(sushu(a[0]+a[n-1])&&i==n){//递归跳出条件,当素数环数组中第一个数与最后一个数相加为素数时,并输出素数环for(int j=0;j<n;j++){if(j==n-1){System.out.println(a[j]);}else{System.out.print(a[j]+" ");}}//return;}for(int j=1;j<=n;j++){//遍历每个数if(vis[j]&&sushu(a[i-1]+j)){//如果该数没被用过并且与素数环中的上一个数相加为素数则把它加入到素数环中a[i]=j;vis[j]=false;//标记此数已经被用过dfs(vis,a,i+1,n);//搜索下一个数vis[j]=true;}}}public static boolean sushu(int i){//素数判断方法for(int j=2;j*j<=i;j++){if(i%j==0){return false;}}return true;}}
2 0
- 杭电1016 素数环 java代码实现
- 杭电1016 素数环
- 杭电acm 1016 素数环
- 杭电ACM_1016_素数环
- 杭电OJ1016 素数环
- 杭电 2012 ( 素数判定 ) java
- 回文素数的Java实现代码
- 【杭电】素数判定
- 素数环(java实现)
- java实现---杭电2037
- 杭电 1431 素数回文
- 杭电 2012 素数判定
- 杭电--1431--素数回文
- 杭电acm2012 素数判定
- 杭电4548美素数
- 杭电4548 美素数
- 杭电2521 反素数
- 杭电 4548 美素数
- PaperWeekly 第34期 | VAE在chatbot中的应用
- KSoap2-android的调用以及封装使用
- 1066. Root of AVL Tree (25)
- ArrayList与LinkedList的区别
- nginx强制使用https访问(http跳转到https)
- 杭电1016 素数环 java代码实现
- Glide使用总结
- Facebook开源Caffe2深度学习框架:开发者可快速训练和迭代AI模型
- WebStorm license server
- SpringMVC与Struts2区别与比较总结
- Linux I2C(一)之常用的几种实例化(i2c_client ),i2ci2c_client
- 深度学习——核心思想
- Runloop
- JESD79-4 第5章 片上终结电阻ODT(5.1-5.3)