请求编程高手帮助解决编程难题

来源:百度知道 编辑:UC知道 时间:2024/05/15 09:52:22
编程求符合下列条件的1到9的排列:1的后面不能是:3、5、6;2的后面不能是:1、8;3的后面不能是:4、6;4的后面不能是:2、6、7;5的后面不能是:1、7;6的后面不能是:2、3、8;7的后面不能是:4、5;8的后面不能是:1、2、4;9的后面不能是:4、5、8。运行程序后,如有符合条件的就显示该排列,否则显示:没有符合条件的排列!

bool check(int a[9],int i, int b){
if (a[i]==1 && (b==3 || b==4 || b==6)) return false;
if (a[i]==2 && (b==1 || b==8)) return false;
if (a[i]==3 && (b==4 || b==6)) return false;
if (a[i]==4 && (b==2 || b==7 || b==6)) return false;
if (a[i]==5 && (b==1 || b==7)) return false;
if (a[i]==6 && (b==2 || b==3 || b==8)) return false;
if (a[i]==7 && (b==4 || b==5)) return false;
if (a[i]==8 && (b==1 || b==4 || b==2)) return false;
if (a[i]==9 && (b==5 || b==4 || b==8)) return false;
for (int j=0;j<9;j++)
if (a[j]==b) return false;
return true;
}
main()
{
int n[9]={0};
bool found=true;
for (int i1=1;i1<=9;i1++){
n[0]=i1;
for (int i2=1;i2<=9;i2++){
if (check(n,0,i2)) n[1]=i2;
else continue;
for (int i3=1;i3<=9;i3++){
if (check(n,1,i3)) n[2]=i3;
else continue;
for (int i4=1;i4<=9;i4++){
if (check(n,2,i4))