国际象棋中王后可以纵向,横向,正斜向(45度)反斜向(135度)通行,可以杀死经过格中任一敌子现在给出任意坐标 int i,j;要求打印她的攻击线到控制台
...
int[,] data=new int[8,8];
void Print();//这个算法不需要,不着为讨论点
void QueenFire(int i,int j)//本方法着为讨论点,请给出算法;
{
//设置根据i,j求出的王后攻击线(一共4条)把它们标记为"1"记入data在通过print();打印出来
}算法越高效越好,越精炼越好.
...
int[,] data=new int[8,8];
void Print();//这个算法不需要,不着为讨论点
void QueenFire(int i,int j)//本方法着为讨论点,请给出算法;
{
//设置根据i,j求出的王后攻击线(一共4条)把它们标记为"1"记入data在通过print();打印出来
}算法越高效越好,越精炼越好.
解决方案 »
- C# 如何实现右键单击listView中的项目弹出菜单
- 关于数据库的位置问题
- 用c#做应用软件 需要知道掌握什么技术
- 我在程序中做了一个远程备份,但备份到了我连接服务器的机子上了,我如何将这个.bak文件复制到我本地呢??然后再把服务器的文件删除,这次加高分,谢了?
- c#编写的一个socket通信时报通信Client端, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nul
- 急!一个低级问题。
- 如何在一个xml文件中进行查询操作?
- 一个播放音乐时的问题
- dataGiveView中保存数据
- 关于打开自定义文件自动加载数据
- 【经典】WebRequest读取网页不完整,而webclick却完全正常
- 新手: 数据库插入不成功,谁能解决?
{
int[,] data=new int[8,8]; void QueenFire(int i, int j) //本方法着为讨论点,请给出算法;
{
for (int x = 0; x < 8; x++)
{
data[i, x] = data[x, i] = 1; // 纵横向
}
//设置根据i,j求出的王后攻击线(一共4条)把它们标记为"1"记入data在通过print();打印出来
}
}
{
int[,] data=new int[8,8]; void QueenFire(int i, int j) //本方法着为讨论点,请给出算法;
{
for (int k = 0; k < 8; k++)
{
data[i, k] = data[k, i] = 1; // 纵横向
}
for (int k = 1; k < 8; k++)
{
data[(i + k) % 8, (j + k ) % 8] = 1; // 正斜向
data[(i + k) % 8, (j + 8 - k) % 8] = 1; // 反斜向
}
}
}
{
static int[,] data=new int[8,8]; static void QueenFire(int i, int j) //本方法着为讨论点,请给出算法;
{
for (int k = 0; k < 8; k++)
{
data[i, k] = data[k, j] = 1; // 纵横向
}
for (int k = 1; k < 8; k++)
{
if (i + k < 8 && j + k < 8) data[i + k, j + k] = 1; // 正斜向正向
if (i - k >= 0 && j - k >= 0) data[i - k, j - k] = 1; // 正斜向反向
if (i + k < 8 && j - k >= 0) data[i + k, j - k] = 1; // 反斜向正向
if (i - k >= 0 && j + k < 8) data[i - k, j + k] = 1; // 反斜向反向
}
} static void Print() //这个算法不需要,不着为讨论点
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
System.Console.Write(data[i,j] == 0 ? '-' : '*');
}
System.Console.WriteLine();
}
}
static void Main()
{
QueenFire(2,5);
Print();
}
}
{
int[,] data = new int[8, 8];
internal void QueenFire(int i, int j) //本方法着为讨论点,请给出算法;
{
for (int k = 0; k < 8; k++)
{
data[i, k] = data[k, i] = 1; // 纵横向
}
for (int k = 1; k < 8; k++)
{
data[(i + k) % 8, (j + k) % 8] = 1; // 正斜向
data[(i + k) % 8, (j + 8 - k) % 8] = 1; // 反斜向
}
this.Print();
}
//
void Print()
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
Console.Write(this.data[i,j].ToString()+",");
}
Console.Write("\r\n");
}
}
}
经测试发现,结果并未达至预期..
测试代码: Q8 q = new Q8();
q.QueenFire(3, 2);
Console.WriteLine();
q.QueenFire(1, 7);
class Q8
{
int[,] data = new int[8, 8];
internal void QueenFire(int i, int j) //本方法着为讨论点,请给出算法;
{
for (int k = 0; k < 8; k++)
{
data[i, k] = data[k, i] = 1; // 纵横向
}
for (int k = 1; k < 8; k++)
{
data[(i + k) % 8, (j + k) % 8] = 1; // 正斜向
data[(i + k) % 8, (j + 8 - k) % 8] = 1; // 反斜向
}
this.Print();
}
//
void Print()
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
Console.Write(this.data[i,j].ToString()+",");
}
Console.Write("\r\n");
}
}
internal void ResetTestData()
{
this.data = new int[8, 8];
Console.WriteLine();
}
}
//测试代码:
Q8 q = new Q8();
q.QueenFire(3, 2);
q.ResetTestData();
q.QueenFire(1, 7);
{
for (int k = 0; k < 8; k++) queen[i, k] = queen[k, j] = 1;
int i1 = i, i2 = i, i3 = i, i4 = i, j1 = j, j2 = j, j3 = j, j4 = j;
while (i1 > 0 && j1 > 0) queen[--i1, --j1] = 1;
while (i2 > 0 && j2 < 7) queen[--i2, ++j2] = 1;
while (i3 < 7 && j3 > 0) queen[++i3, --j3] = 1;
while (i4 < 7 && j4 < 7) queen[++i4, ++j4] = 1;
}
{
for (int m = 0; m < 8; m++) for (int n = 0; n < 8; n++)
if ((m == i) || (n == j) || Math.Abs(m - i) == Math.Abs(n - j)) queen[m, n] = 1;
} static private void Print()
{
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
Console.Write(" " + ((queen[i, j] == 1) ? "*" : "."));
Console.WriteLine("\r\n");
}
}