问题遇到的现象和发生背景
如何得到答案的一个解便停止??使用回溯法但是永远是把所有的解全部输出,题目要求只输出一个解
用代码块功能插入代码,请勿粘贴截图
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 20
int p[N];
int a[N];
int Is_prime(int a1,int a2)
{
int sum = a1+ a2;
for (int i = 2; i < sum / 2; i++)
{
if ((sum % i) == 0)
{
return 0;
}
}
return 1;
}
int Can_place(int a[], int t, int i)
{
for (int j = 0; j < t; j++)
{
if (Is_prime(a[i], p[t-1]) == 0 || p[j] == a[i])
{
return 0;
}
}
if (t == N - 1)
{
if (Is_prime(a[i], p[0]) == 0)
{
return 0;
}
}
return 1;
}
void DFS_ssh(int a[], int t)
{
if (t >= N)
{
for (int i = 0; i < N; i++)
{
printf("%d ",p[i]);
}
}
else
{
for (int i = 0; i < N; i++)
{
if (Can_place(a, t, i))
{
p[t] = a[i];
DFS_ssh(a, t + 1);
p[t] = 0;
}
}
}
}
int main()
{
for (int i = 0; i < N; i++)
{
a[i] = i + 1;
}
DFS_ssh(a,0);
return 0;
}