system("pause");
}
voidinit1()//4乘4矩阵
{
inti,j;
inta[4]={0};
srand(time(NULL));
for(i=1;i<4;i++)
for(j=1;j<5;j++)
{
chessman[i][j]=rand()%4+65;
if(chessman[i][j]==65)a[0]++;
if(chessman[i][j]==66)a[1]++;
if(chessman[i][j]==67)a[2]++;
if(chessman[i][j]==68)a[3]++;
}
for(i=0;i<4;i++)
{
if(a[i]%2!
=0)
chessman[4][i+1]=i+65;
else
chessman[4][i+1]=69;
}
}
voidprint1()
{
inti,j;
system("cls");
printf("\t1234\n");
for(i=0;i<5;i++)
{
printf("\t\n\t");
for(j=0;j<5;j++)
{
printf("%4c",chessman[i][j]);
if(j==4&&i!
=0&&i!
=5)
printf("\t%d",i);
}
}
printf("\n\n\n\n");
}
intexit1()
{
inti,j;
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
if(chessman[i][j]!
=0)
return1;
}
return0;
}
voidinit2()//6乘6矩阵
{
inti,j;
inta[6]={0};
srand(time(NULL));
for(i=1;i<6;i++)
for(j=1;j<7;j++)
{
chessman[i][j]=rand()%6+65;
if(chessman[i][j]==65)a[0]++;
if(chessman[i][j]==66)a[1]++;
if(chessman[i][j]==67)a[2]++;
if(chessman[i][j]==68)a[3]++;
if(chessman[i][j]==69)a[4]++;
if(chessman[i][j]==70)a[5]++;
}
for(i=0;i<6;i++)
{
if(a[i]%2!
=0)
chessman[6][i+1]=i+65;
else
chessman[6][i+1]=71;
}
}
voidprint2()
{
inti,j;
system("cls");
printf("\t123456\n");
for(i=0;i<8;i++)
{
printf("\t\n\t");
for(j=0;j<8;j++)
{
printf("%4c",chessman[i][j]);
if(j==6&&i!
=0&&i!
=7)
printf("\t%d",i);
}
}
printf("\n\n\n\n");
}
intexit2()
{
inti,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
if(chessman[i][j]!
=0)
return1;
}
return0;
}
voidinit3()//8乘8矩阵
{
inti,j;
inta[8]={0};
srand(time(NULL));
for(i=1;i<8;i++)
for(j=1;j<9;j++)
{
chessman[i][j]=rand()%8+65;//棋盘内容为A到H
if(chessman[i][j]==65)a[0]++;//记录A的个数
if(chessman[i][j]==66)a[1]++;
if(chessman[i][j]==67)a[2]++;
if(chessman[i][j]==68)a[3]++;
if(chessman[i][j]==69)a[4]++;
if(chessman[i][j]==70)a[5]++;
if(chessman[i][j]==71)a[6]++;
if(chessman[i][j]==72)a[7]++;
}
for(i=0;i<8;i++)
{
if(a[i]%2!
=0)
chessman[8][i+1]=i+65;
else
chessman[8][i+1]=73;
}
}
voidprint3()
{
inti,j;
system("cls");
printf("\t12345678\n");
for(i=0;i<10;i++)
{
printf("\t\n\t");
for(j=0;j<10;j++)
{
printf("%4c",chessman[i][j]);
if(j==9&&i!
=0&&i!
=9)
printf("\t%d",i);
}
}
printf("\n\n\n\n");
}
intexit3()
{
inti,j;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
if(chessman[i][j]!
=0)
return1;
}
return0;
}
voidnear1(inta,intb,inta1,intb1)//三种路径
{
intarow[2];
intaline[2];
intbrow[2];
intbline[2];
intstart=0,end=0;//临时两个点
inti,j,n;//用于循环
for(i=0;i<2;i++)//初始化数组
{
arow[i]=a;
brow[i]=a1;
aline[i]=b;
bline[i]=b1;
}
/////////////////////////////////////////(a,b)a列中有哪些列
for(i=a+1;i<10;i++)
{
if(chessman[i][b]==0)
arow[1]=i;//arow【1】A点a行向下向量
else
break;
}
for(i=a-1;i>=0;i--)
{
if(chessman[i][b]==0)//arow【0】A点a行向上向量
arow[0]=i;
else
break;
}
////////////////////////////////////////////(a1,b1)a行中有哪些列
for(i=a1+1;i<10;i++)
{
if(chessman[i][b1]==0)//brow[1]B点a1行向下向量
brow[1]=i;
else
break;
}
for(i=a1-1;i>=0;i--)
{
if(chessman[i][b1]==0)//brow[1]B点a1行向上向量
brow[0]=i;
else
break;
}
//////////////////////////////////////(a,b)b行有哪些列
for(i=b+1;i<10;i++)
{
if(chessman[a][i]==0)//aline[1]A点b列向右向量
aline[1]=i;
else
break;
}
for(i=b-1;i>=0;i--)
{
if(chessman[a][i]==0)//aline[0]A点b列向左向量
aline[0]=i;
else
break;
}
/////////////////////////////(a1,b1)中b1列中有哪些行
for(i=b1+1;i<10;i++)
{
if(chessman[a1][i]==0)//bline[1]B点b1列向左向量
bline[1]=i;
else
break;
}
for(i=b1-1;i>=0;i--)
{
if(chessman[a1][i]==0)//bline[1]B点b1列向右向量
bline[0]=i;
else
break;
}
///////////////////////////////////////关键算法///////////////////////////////////
/**********************
情况一
(a,b)
(a1,b1)
*********************************
情况二
(a.b)
(a1,b1)
***********************************
/考虑上下向量
if(brow[0]>=arow[0])//向上方向向量有共同的列向量
start=brow[0];//取大的
else
start=arow[0];
if(brow[1]<=arow[1])//向下的方向向量有共同的列向量
end=brow[1];取小的
else
end=arow[1];
for(;start<=end;start++)//列向量上共同sart到end
{
//b1要大于b,否则就交换
如果不交换将使下面的循环出错、//
if(b{
j=b;//小的赋值到j
i=b1;//大的赋值到i
}
else
{
j=b1;
i=b;
}
///这里节约一个变量
for(n=0;j
{
if(chessman[start][j]==0)//同一行上,所有列都是0
n++;
else
break;
}
if((n==b-b1)&&(n>0))//因为b和b1大小不能确定,所以有两个if
chessman[a][b]=chessman[a1][b1]=0;
if((n==b1-b)&&(n>0))
chessman[a][b]=chessman[a1][b1]=0;
}
//考虑左右向量//
if(aline[0]>=bline[0])//向左的向量有共同的列向量
start=aline[0];//取大的
else
start=bline[0];
if(aline[1]end=aline[1];
else
end=bline[1];
for(i=start;i<=end;i++)
{
for(j=a,n=0;j{
if(chessman[j][i]==0)//同一列上所有行都是0
n++;
else
break;
}
if(n==a1-a&&n>0)
{
chessman[a][b]=chessman[a1][b1]=0;
break;
}
}
//*************************************************************************
*同行或者同列(a,b)
或者
(a,b)(a1,b1)(a1,b1)
*******************************************************************************
if(a==a1)//同行
{
if((aline[1]>=b1)||(aline[0]<=b1))
chessman[a][b]=chessman[a1][b1]=0;
}
if(b==b1)//同列
{
if(arow[1]>=a1)
chessman[a][b]=chessman[a1][b1]=0;
}
}