开发工具:
文件大小: 43kb
下载次数: 0
上传时间: 2008-10-30
详细说明: #include "stdafx.h" #include #define NUM 8 //定义数组大小 int main () { int a[NUM+1 ]; //int number; int i; int k; int flag; int notfinish = 1; int count = 0; i = 1; //正在处理的元素下标,表示前i-个元素已符合要求,正在处理第i个元素 a[1] = 1; //为数组的第一个元素赋初值 printf ("结果:\n"); while (notfinish) //处理尚未结束 { while (notfinish && i <= NUM) //处理尚未结束且还没处理到第NUM个元素 { for (flag = 1, k = 1; flag && k & lt; i; k++) //判断是否有多个皇后在同一行 { if (a[k] == a[i]) flag = 0; } for (k = 1; flag && k < i; k++) //判断是否有多个皇后在同一对角线 { if ((a[i] == a[k] - (k - i)) || (a[i] == a[k] + (k - i))) flag = 0; } if (!flag) //若存在矛盾不满足要求,需要重新设置第i个元素 { if (a[i] == a[i - 1]) //若a[i]的值已经经过一圈追上a[i-]的值 { i--; //退回一步,重新试探处理前的一个元素 if (i > 1 && a[i] == NUM) { a[i] = 1; //当a[i]的值为NUM时将a[i]的值置 } else if (i == 1 && a[i] == NUM) { notfinish = 0; //当第一位的值达到NUM时结束 } else { a[i]++; //将a[i]的值取下一个值 } } else if (a[i] == NUM) { a[i] = 1; } else { a[i]++; //将a[i]的值取下一个值 } } else if (++i <= NUM) //第i位已经满足要求则处理第i+位 { if (a[i - 1] == NUM) //若前一个元素的值为NUM则a[i]= { a[i] = 1; } else { a[i] = a[i - 1] + 1; //否则元素的值为前一个元素的下一个值 } } } if (notfinish) { ++count; printf ((count - 1) % 3 ? "[%2d]:" : "[%2d]:", count); for (k = 1; k <=NUM; k++) //输出结果 { printf (" %d", a[k]); } printf (" \n"); if (a[NUM - 1] < NUM) //修改倒数第二位的值 { a[NUM - 1]++; } else { a[NUM - 1] = 1; } i = NUM - 1; //开始寻找下一个满足条件的解 } }//while return 0; } ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.