黑崎一护12阶连招:要PASCAL源程序
来源:百度文库 编辑:神马品牌网 时间:2024/05/11 20:35:57
也许你能用数学办法推出鱼的条数,但我们的要求你编出一个程序,让计算机帮你算出鱼的总数。
#include <stdio.h>
#include <conio.h>
typedef struct _grid99
{
int value[9][9];
char disp[9][9];
} grid99;
char x_status[9][9];
char y_status[9][9];
char z_status[9][9];
typedef struct _list9
{
int value[9];
char disp[9];
} list9;
list9 l;
void print(grid99 * g)
{
int i,j;
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
printf("%c ", g->disp[i][j]);
}
printf("\n");
}
printf("\n");
}
int check(grid99 * g)
{
int i,j,x,y, value;
for(i=0; i<9; i++)
{
value=0;
for(j=0; j<9; j++)
{
value+=g->value[i][j];
}
if (value!=511)
{
return -1;
}
value=0;
for(j=0; j<9; j++)
{
value+=g->value[j][i];
}
if (value!=511)
{
return -1;
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
value=0;
for(x=0;x<3;x++)
{
for(y=0;y<3;y++)
{
value+=g->value[i*3+x][j*3+y];
}
}
if (value!=511)
{
return -1;
}
}
}
print(g);
return 0;
}
int f(int a_n)
{
int i, r=1;
for(i=1;i<=a_n;i++)
{
r*=2;
}
return r;
}
void find(grid99 * g, int level)
{
int i, k, x, y, z, id;
if(level>=81)
{
printf("level>=81");
return;
}
x=level/9;
y=level%9;
z=(int)(x/3)*3+(int)(y/3);
for(i=0;i<9;i++)
{
if(x_status[x][i]=='Y' && y_status[y][i]=='Y' && z_status[z][i]=='Y')
{
g->value[x][y]=l.value[i];
g->disp[x][y]=l.disp[i];
x_status[x][i]='N';
y_status[y][i]='N';
z_status[z][i]='N';
if(level==80)
{
check(g);
}
else
{
find(g, level+1);
}
id=g->disp[x][y]-0x30-1;
x_status[x][id]='Y';
y_status[y][id]='Y';
z_status[z][id]='Y';
g->value[x][y]=0;
g->disp[x][y]=0x30;
}
}
}
main()
{
int i,j,k;
grid99 g;
for(i=0; i<9; i++)
{
l.value[i]=f(i);
l.disp[i]=i+0x30+1;
//printf("%c ", l.disp[i]);
//printf("%d ", l.value[i]);
for(j=0; j<9; j++)
{
g.value[i][j]=0;
g.disp[i][j]=0x30;
//printf("%c ", g.disp[i][j]);
//printf("%d ", g.value[i][j]);
}
for(k=0;k<9;k++)
{
x_status[i][k]='Y';
y_status[i][k]='Y';
z_status[i][k]='Y';
}
}
find(&g,0);
}
void main()
{
int i,j,tmp;
int a[9][9];
int row=9,line=9;
for(i=0;i<line;i++)
a[0][i]=i+1;
tmp=a[0][0];
for(i=1;i<row;i++)
{
for(j=0;j<line-1;j++)
a[i][j]=a[i-1][j+1];
a[i][j]=tmp;
tmp=a[i][0];
}
for(i=0;i<row;i++)
{
for(j=0;j<line;j++)
printf("%d ",a[i][j]);
printf("\n");
}