C语言编译成功但结果不对,求解答

#include<stdio.h>
#include<math.h>
using namespace std;
int PrimeCircle(int n);
int Check(int k);
int su(int x);
int main()
{ int i,n,a[20];
printf("请输入一个整数:");
scanf("%d",&n);
printf("环中依此填写数字:");
PrimeCircle(n);
}
int PrimeCircle(int n) //填写1~n共n个整数
{ int i,k,a[20];
for (i=0;i<n; i++) //将数组a[n]初始化为0
a[i]=0;
a[0]=1; k=1; //指定第0个位置填写 1
while(k>=1)
{ a[k]=a[k]+1;
while (a[k]<n)
if (Check(k)==1) break; //位置k可以填写整数a [k]
else a[k]=a[k]+1; //试探下一个数
if(a[k]<=n && k==n-1) //求解完毕,输出解
{
for(i=0; i<n; i++)
printf("%d ",a[i]);

}
if (a[k]<=n && k<n-1)
k=k+1; //填写下一个位置
else
a[k--]=0; //回溯
}
}
int Check(int k) //判断位置k的填写是否满足约束条件
{ int flag=0,a[20],n;
for (int i=0; i<k; i++) //判断是否重复
if (a[i]==a[k]) return 0;
flag=su(a[k]+a[k-1]); //判断相邻数之和是否素数
if(flag==1 &&k==n-1) //判断第一个和最后一个是否素数
flag=su(a[k]+a[0]);
return flag;
}
int su(int x) { //判断整数x是否为素数
int i, n;
n=(int)sqrt(x);
for (i = 2; i <= n; i++)
if (x % i == 0) return 0;
return 1;
}

img

check里的a没有初始化就使用了。把这个a声明成全局的或者把a作为参数传进去。