【 UVA - 524 】Prime Ring Problem 素数环(DFS回溯)
题目传送代码:#include <iostream>#include <algorithm>#include <cstring>#include <vector>typedef long long ll;using namespace std;int n,cnt=0,a[20]={1}; //a数组记录环,第一个数是1bool vis[20]={fa
·
代码:
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
typedef long long ll;
using namespace std;
int n,cnt=0,a[20]={1}; //a数组记录环,第一个数是1
bool vis[20]={false}; //标记是否取过
bool is(int x) //判断素数
{
if(x<2) return 0;
for(int i=2;i*i<=x;i++)
if(x%i==0) return 0;
return 1;
}
void dfs(int num)
{
if(num==n) //已找到n个数
{
if(is(1+a[n-1])) //第一个数和最后一个数之和也要是素数
{
printf("%d",a[0]);
for(int i=1;i<n;i++) printf(" %d",a[i]); //输出
printf("\n");
}
return;
}
for(int i=2;i<=n;i++)
{
if(!vis[i] && is(a[num-1]+i)) //没访问过,与上一个数之和为素数
{
a[num]=i;
vis[i]=1;
dfs(num+1);
vis[i]=0; //回溯 取出数
a[num]=0; //这步应该无所谓(可省)
}
}
}
int main()
{
while(cin>>n)
{
if(cnt) printf("\n");
printf("Case %d:\n",++cnt);
dfs(1); //数组0已经放了1,从数组下标1开始dfs
}
return 0;
}
这无语的格式错误
更多推荐
活动日历
查看更多
直播时间 2025-02-26 16:00:00


直播时间 2025-01-08 16:30:00


直播时间 2024-12-11 16:30:00


直播时间 2024-11-27 16:30:00


直播时间 2024-11-21 16:30:00


目录
所有评论(0)