📄 knight.cpp
字号:
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
ifstream input;
ofstream output;
int height,vertical,dian=0;
int Xzuobiao[]={2,1,1,2, -1,-2,-2,-1};
int Yzuobiao[]={1,2,-2,-1, 2, 1,-1,-2};
int **qipange=NULL;
struct path *path;
void chushihua()
{
for(int i=0;i<height;i++)
for(int j=0;j<vertical;j++)
qipange[i][j]=0;
}
bool isok(int m,int n)
{
if( (m>=0)&&(m<height)&&(n>=0)&&(n<vertical)&&(qipange[m][n]==0) ) return 1;
else return 0;
}
int outnumber(int m,int n)
{
int biaozhi=0;
for(int i=0;i<8;i++)
if(isok( (m+Xzuobiao[i]),(n+Yzuobiao[i]) )) biaozhi++;
return biaozhi;
}
void display()
{
if(dian==0)
{
for(int i=0;i<height;i++)
{
for(int j=0;j<vertical;j++)
{
output<<qipange[i][j]<<" ";
}
output<<endl;
}
}
else
{
for(int j=0;j<vertical;j++)
{
for(int i=0;i<height;i++)
{
output<<qipange[i][j]<<" ";
}
output<<endl;
}
}
}
int mixmin(int m,int n)
{
int zuixiaodir=0,mixtotal=9,a=0;
for(int i=0;i<8;i++)
{
if(isok ((m+Xzuobiao[i]),(n+Yzuobiao[i])))
{
if( ((m+Xzuobiao[i]==1)&&(n+Yzuobiao[i]==2))||( (m+Xzuobiao[i]==3)&&(n+Yzuobiao[i]==3) ) )
continue;
a=outnumber((m+Xzuobiao[i]),(n+Yzuobiao[i]));
if( a &&(a<mixtotal))
{
mixtotal=a;
zuixiaodir=i;
}
}
}
if(zuixiaodir==0) {
for(i=0;i<8;i++)
if(isok ( (m+Xzuobiao[i]),(n+Yzuobiao[i]) )) return i;
}
return zuixiaodir;
}
void main()
{
int x=0,y=0,i=0;
int step=1;
input.open("input.txt");
output.open("output.txt");
if (!input)
{
cout<<"fail in opening input.txt";
return;
}
if (!output)
{
cout<<"fail in opening output.txt";
return;
}
input>>height>>vertical;
if(height<vertical)
{
int temp;
temp=height;
height=vertical;
vertical=temp;
dian=1;
}
qipange=new int*[height];
for(int ii = 0; ii<height; ii++)
qipange[ii] = new int[vertical];
output<<'('<<x<<','<<y<<')'<<" ";
chushihua();
qipange[x][y]=step;
for(step=2;step<=height*vertical;step++)
{
i=mixmin(x,y);
x+=Xzuobiao[i];
y+=Yzuobiao[i];
qipange[x][y]=step;
if(dian==0)
{
output<<'('<<x<<','<<y<<')'<<" ";
if((step%vertical)==0)
output<<endl;
}
else
{
output<<'('<<y<<','<<x<<')'<<" ";
if((step%height)==0)
output<<endl;
}
}
output<<endl;
display();
for(int jj=0;jj<vertical;jj++)
delete []qipange[jj];
delete []qipange;
input.close();
output.close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -