69,369
社区成员
发帖
与我相关
我的任务
分享
void enumerate(Node *node,int *data,int x,int y,int row,int column,int MaxDeep,int MinDeep,int MaxWidth,int rest)
{
int i,j;
int temp[row][column];
int rotationData[row][column], udsymData[row][column],rotation90[row][column], rotation180[row][column], rotation270[row][column];
int temp1[row][column],temp2[row][column],temp3[row][column],temp4[row][column],temp5[row][column];
if((x<0)||(y<0)||(x>=row)||(y>=column)) return;
for(i=0;i<row;i++)
{
for(j=0;j<column;j++) temp[i][j] = data[i*column + j];
}
if(temp[x][y] == 1) return;
temp[x][y] =1;
rest = rest-1;
if((row-x) >= MaxDeep) MaxDeep = row -x;
if((row-x-1)<=MinDeep) MinDeep = row -x-1;
if(y <= MaxWidth) MaxWidth = y;
if(rest<=0)
{
if((MinDeep == 0) && (MaxDeep == row) &&(MaxWidth==0))
{
if(row != column)
{
Rotation180(&temp[0][0],&rotationData[0][0],row,column);
UDSym(&temp[0][0],&udsymData[0][0],row,column);
if(InSqureArray(node,&temp[0][0],row,column)) return;
if(InSqureArray(node,&rotationData[0][0],row,column)) return;
if(InSqureArray(node,&udsymData[0][0],row,column)) return;
node->array[node->count] = &temp[0][0];
printf("node->array[%d] =%p \n",node->count,node->array[node->count]);
node->count = node->count +1;
printf("print array\n");
for(i=0;i<row;i++)
{
for(j=0;j<column;j++) printf("%d",temp[i][j]);
printf("\n");
}
printf("\n");
}
else if(row == column)
{
Rotation90(&temp[0][0],&rotation90[0][0],row,column);
Rotation180(&temp[0][0],&rotation180[0][0],row,column);
Rotation90(&rotation180[0][0],&rotation270[0][0],row,column);
UDSym(&temp[0][0],&udsymData[0][0],row,column);
if(InSqureArray(node,&temp[0][0],row,column)) return;
if(InSqureArray(node,&rotation90[0][0],row,column)) return;
if(InSqureArray(node,&rotation180[0][0],row,column)) return;
if(InSqureArray(node,&rotation270[0][0],row,column)) return;
if(InSqureArray(node,&udsymData[0][0],row,column)) return;
node->array[node->count] = &temp[0][0];
printf("node->array[%d] =%p \n",node->count,node->array[node->count]);
node->count = node->count +1;
printf("print array\n");
for(i=0;i<row;i++)
{
for(j=0;j<column;j++) printf("%d",temp[i][j]);
printf("\n");
}
printf("\n");
}
}
return;
}
for(i=0;i<row;i++)
{
for(j=0;j<column;j++)
{
temp1[i][j]=temp[i][j];
temp2[i][j]=temp[i][j];
temp3[i][j]=temp[i][j];
temp4[i][j]=temp[i][j];
temp5[i][j]=temp[i][j];
}
}
enumerate(node,&temp1[0][0],x-1,y-1,row,column,MaxDeep,MinDeep,MaxWidth,rest);
enumerate(node,&temp2[0][0],x,y-1,row,column,MaxDeep,MinDeep,MaxWidth,rest);
enumerate(node,&temp3[0][0],x+1,y-1,row,column,MaxDeep,MinDeep,MaxWidth,rest);
enumerate(node,&temp4[0][0],x-1,y,row,column,MaxDeep,MinDeep,MaxWidth,rest);
enumerate(node,&temp5[0][0],x+1,y,row,column,MaxDeep,MinDeep,MaxWidth,rest);
}
void exec(int row,int column,int n)
{
int data[row][column];
int i,j,k;
Node node;
Node *p=&node;
int num;
for(i=0;i<row;i++)
{
for(j=0;j<column;j++)
{
data[i][j]=0;
}
}
node.row=row;
node.coloumn=column;
node.count=0;
node.array[MaxNum]= NULL;
//枚举
for(i=0;i<row;i++)
{
enumerate(p,&data[0][0],i,column-1,row,column,0,5,5,n);
}
printf("node->array[0] =%p \n",node.array[0]);
sum = sum + node.count;
}