C#8皇后解法,把注释写清楚一点. 风格要象C#,不要写得象C和C++的代码那样难看.. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 class Q8{ 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]的方阵中,放置8个王后,要求她们不互杀(互吃)关于国际象棋中王后的相关讯息,请参见国际象棋规则,在这里恕不赘述. 随便放还是有一个Queen的起始点? 我觉得N皇后问题算法的时间复杂度应该为O(N).再大就不对了. 给个此 o(n) 时间复杂度的推导公式我看看。如果是 o(n),它的推导应该异常简单,连最少量的多项式知识都不需要,比推导 1+2+3+..._n 的公式都要简单很多。那么请给出推到公式来看看! 80个王后?!sp1234把这个问题,引深了啊那你得需要多大的方阵,怎么也得int[,] data=new int[80,80]吧目前我认为不需要严格的数学证明就可以知道,N个王后最小需要的棋盘大小,为int[N,N]标准解决法中好象会有90多个不同的结果,你这推广到80个方阵的话,不知道成什么样子了.. 我给一个时间复杂度推导的提示:t(n)=t(n-1)+s(n-1)t(n)代笔求解n个皇后的时间,s(n)代表执行那个选择与前n个皇后都不相互攻击的第n+1个位置的子程序的时间。请根据这个公式,推导出它的时间复杂度是 o(n) ?! 在1个NXN的棋盘中搁N个queen,我觉得是不是只要按"日"字型去摆就行啊? 所以是O(N)级的.想法而已.我去试试. C# 实现八皇后太长了贴不上来http://hi.baidu.com/wangzhe1945/blog/item/84accb07d37032ce7a894771.html C#如何判断线程池所有的线程执行已结束? 模板页中用JS增加删除CheckBoxList。版主周末在线不? c#调用华为cmpp api的问题 PXE的网刻问题 【版务帖】2009年5月C#版务帖 DevExpress.XtraGrid.Views.Grid.GridView 定位到某行某列 求助 救命,如何制作各种不同形状的按钮? 提交后刷新页面 C/S编程比起B/S编程,有没有那么一点点优势呢? 怎么再建一个窗口 C# SOCKET 通信问题, 望高手赐教,谢谢!~
{
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();
}
}