📄 1.h
字号:
#include"iostream.h"
#include"math.h"
#define size 21
class zishu
{
int * c;
int a[size][size];
int * mark;
int path[size];
int court;
int l; //判断是否为倒栈 和放到递归内一样
public:
zishu();
void Y();
int he(int i,int j);
void bian_li(int start);
void display(int q[]);
};
zishu::zishu()
{ int i;
c=new int[size];
mark=new int[size];
for(i=1;i<size;i++)
c[i]=i;
Y();
for(i=0;i<size;i++)
{ mark[i]=0;path[i]=0;}
path[0]=1;
mark[0]=1;
mark[1]=1;
court=0;
l=0;
}
void zishu::Y()
{
int i,j;
for(i=0;i<size;i++)
{a[i][0]=i;a[0][i]=i;}
for(i=1;i<size;i++)
for(j=1;j<size;j++)
{
if(he(c[i],c[j]))
{ a[i][j]=1;
}
else
{a[i][j]=0;}
}
a[1][1]=0;
for(i=0;i<size;i++)
{ for(j=0;j<size;j++)
{ cout<<a[i][j];
if(a[i][j]>=10)
cout<<" ";
else
cout<<" ";
}
cout<<endl;
}
}
int zishu::he(int i,int j)
{
int sum;
int k;
int b=1;
sum=i+j;
for(k=2;k<sum;k++)
if(sum%k==0)
{ b=0;break;}
return b;
}
void zishu::bian_li(int start)
{
int i;
int j;
// cout<<v0;
// mark[v0]=1;
// i=1;
if(l==1)
i=path[court+1]+1; //如为倒栈则跳过path[court+1]
else
i=1; //如不是则从头找未标记数
// cout<<"#"<<court<<","<<start<<endl;
if(court==size-2&&a[path[court]][1]==1) //######
{for(j=0;j<size-1;j++)
cout<<path[j]<<"->";
cout<<endl;}
/* for(j=0;j<size;j++)
if(mark[j]==0)
cout<<j<<"->";
cout<<endl; */
// cout<<"#"<<i;
// cout<<"**"<<court;
while(i<size&&a[start][i]==0) i++;
// cout<<"*"<<i;
while(i<size)
{
if(mark[i]==0)
{
mark[i]=1;path[++court]=i;l=0;
/* if(court==19&&a[path[court]][1]==1)
{ cout<<"#";
display(path);
i=size-1;}
else 应放到外面######处 */
bian_li(i);
}
i++;
while(i<size&&a[start][i]==0) i++;
}
mark[path[court]]=0;
court--;
l=1;
}
void zishu::display(int q[])
{
int i;
q[20]=1;
for(i=0;i<size;i++)
cout<<q[i]<<"->";
cout<<endl;
// q[20]=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -