C语言跳马问题
- 格式:doc
- 大小:34.00 KB
- 文档页数:3
#include<iostream.h>
#define N 65
typedef struct chessman{
int i;
int j;
int flag;
}chessman;
typedef struct{
chessman data[N];
int front;
int rear;
}quene;
chessman A[9][9];
void initquene(quene *Q)
{
Q->front=0;
Q->rear=0;
}
void input(quene *Q,chessman *p)
{
p->flag=1;
Q->rear++;
Q->data[Q->rear].i=p->i;
Q->data[Q->rear].j=p->j;
Q->data[Q->rear].flag=1;
}
chessman *output(quene *Q)
{
Q->front++;
return &(Q->data[Q->front-1]);
}
void visit(quene *Q,chessman *p)
{
if(Q->front<=63)
{
if(((p->i+2)<=8)&&((p->j+1)<=8)) //左上方 2 1 if(A[p->i+2][p->j+1].flag==0)
input(Q,&A[p->i+2][p->j+1]);
if((p->i+1)<=8&&(p->j+2)<=8) //左上方 1 2 if(A[p->i+1][p->j+2].flag==0)
input(Q,&A[p->i+1][p->j+2]);
if((p->i-1)>0&&(p->j+2)<=8) //右上方 -1 2 if(A[p->i-1][p->j+2].flag==0)
input(Q,&A[p->i-1][p->j+2]);
if((p->i-2)>0&&(p->j+1)<=8)//右上方 -2 1
if(A[p->i-2][p->j+1].flag==0)
input(Q,&A[p->i-2][p->j+1]);
if((p->i-2)>0&&(p->j-1)>0)//右下方 -2 -1
if(A[p->i-2][p->j-1].flag==0)
input(Q,&A[p->i-2][p->j-1]);
if((p->i-1)>0&&(p->j-2)>0)//右下方 -1 -2
if(A[p->i-1][p->j-2].flag==0)
input(Q,&A[p->i-1][p->j-2]);
if((p->i+1)<=8&&(p->j-2)>0)//左下方 1 -2
if(A[p->i+1][p->j-2].flag==0)
input(Q,&A[p->i+1][p->j-2]);
if((p->i+2)<=8&&(p->j-1)>0)//左下方 2 -1
if(A[p->i+2][p->j-1].flag==0)
input(Q,&A[p->i+2][p->j-1]);
visit(Q, output(Q) );
}
}
void main()
{
int i,j,k,B[9][9];
chessman p;
quene Q;
cout<<"请输入马落子位置的行坐标:"<<endl;
cout<<"(输入的数应该大于小于)"<<endl;
cin>>i;
cout<<"请输入马落子位置的行坐标:"<<endl;
cout<<"(输入的数应该大于小于)"<<endl;
cin>>j;
p.i=i;
p.j=j;
initquene(&Q);
for(i=1;i<=8;i++)
for(j=1;j<=8;j++)
{
A[i][j].flag=0;
A[i][j].i=i;
A[i][j].j=j;
}
Q.data[1].i=p.i;
Q.data[1].j=p.j;
Q.data[1].flag=1;
A[p.i][p.j].flag=1;
Q.front=1;
Q.rear=1;
visit(&Q, &p);
for(k=1;k<=64;k++)
for(i=1;i<=8;i++)
for(j=1;j<=8;j++)
if(Q.data[k].i==i&&Q.data[k].j==j)
B[i][j]=k;
for(i=1;i<=8;i++)
{
for(j=1;j<=8;j++)
cout<<B[i][j]<<'\t';
cout<<endl<<endl;;
}
}。