#include <iostream>
#include <iomanip>
#define N 8
using namespace std;
int a[8][8],sum=1;
int acs[8][8]={{2,3,4,4,4,4,3,2},{3,4,6,6,6,6,4,3},{4,6,8,8,8,8,6,4},{4,6,8,8,8,8,6,4},{4,6,8,8,8,8,6,4},{4,6,8,8,8,8,6,4},{3,4,6,6,6,6,4,3},{2,3,4,4,4,4,3,2}};
int horizontal[8]={2,1,-1,-2,-2,-1,1,2},vertical[8]={1,2,2,1,-1,-2,-2,-1};
void modify(int a,int b)
{
int i;
acs[a][b] = 10;
for(i=0;i<8;i++)
{
if(a+horizontal[i]>=0&&a+horizontal[i]<N&&b+vertical[i]<N&&b+vertical[i]>=0&&acs[a+horizontal[i]][b+vertical[i]]!=10)
{
acs[a+horizontal[i]][b+vertical[i]] –;
}
}
}
void bestloc(int *x,int *y,int a,int b)
{
int i,min = acs[a][b];;
for(i=0;i<8;i++)
{
if(a+horizontal[i]>=0 && a+horizontal[i] <N && b+vertical[i] >=0 && b+vertical[i] <N && min > acs[a+horizontal[i]][b+vertical[i]])
{
min = acs[a+horizontal[i]][b+vertical[i]];
*x = a+horizontal[i];
*y = b+vertical[i];
}
}
}
int main()
{
int x,y,ta,tb,i,j;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
a[i][j] = 0;
cin >> x >> y;
a[x][y] = sum;
while(sum!=64)
{
modify(x,y); //修改x y 周围可达的acs数组值
bestloc(&ta,&tb,x,y);//寻找x y 周围可达的最小acs数组值
a[ta][tb] = ++sum;
x = ta;
y = tb;
}
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
cout << setw(3) << a[i][j];
putchar(‘/n’);
}
system(“pause”);
return 0;
}
骑士周游 贪心
原文作者:骑士周游问题
原文地址: https://blog.csdn.net/yellowOri/article/details/5674350
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/yellowOri/article/details/5674350
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。