[VIP专享]n皇后问题算法实验报告

合集下载

n皇后问题实验报告

n皇后问题实验报告

n皇后问题实验报告n皇后问题实验报告引言:n皇后问题是一个经典的数学问题,它要求在一个n×n的棋盘上放置n个皇后,使得它们互相之间不能相互攻击,即任意两个皇后不能处于同一行、同一列或同一对角线上。

本实验旨在通过编程实现n皇后问题的求解,并探索不同算法在解决该问题上的性能差异。

实验步骤及结果:1. 回溯算法的实现与性能分析回溯算法是最常见的解决n皇后问题的方法之一。

它通过递归的方式遍历所有可能的解,并通过剪枝操作来提高效率。

我们首先实现了回溯算法,并对不同规模的问题进行了求解。

在测试中,我们将问题规模设置为4、8、12和16。

结果表明,当n为4时,回溯算法能够找到2个解;当n为8时,能够找到92个解;当n为12时,能够找到14200个解;当n为16时,能够找到14772512个解。

可以看出,随着问题规模的增加,回溯算法的求解时间呈指数级增长。

2. 启发式算法的实现与性能分析为了提高求解效率,我们尝试了一种基于启发式算法的解决方法。

在该方法中,我们使用了遗传算法来搜索解空间。

遗传算法是一种模拟生物进化过程的优化算法,通过进化操作(如选择、交叉和变异)来寻找问题的最优解。

我们将遗传算法应用于n皇后问题,并对不同规模的问题进行了求解。

在测试中,我们将问题规模设置为8、12和16。

结果表明,遗传算法能够在较短的时间内找到问题的一个解。

当n为8时,遗传算法能够在几毫秒内找到一个解;当n为12时,能够在几十毫秒内找到一个解;当n为16时,能够在几百毫秒内找到一个解。

相比之下,回溯算法在同样规模的问题上需要几秒钟甚至更长的时间。

3. 算法性能对比与分析通过对比回溯算法和启发式算法的性能,我们可以看到启发式算法在求解n皇后问题上具有明显的优势。

回溯算法的求解时间随问题规模呈指数级增长,而启发式算法的求解时间相对较短。

这是因为启发式算法通过优化搜索策略,能够更快地找到问题的解。

然而,启发式算法并非没有缺点。

n皇后 实验报告

n皇后 实验报告

n皇后实验报告《n皇后实验报告》引言n皇后问题是一个经典的计算机科学问题,旨在找到一种方法,在n×n的棋盘上放置n个皇后,使得它们互相之间不能攻击到对方。

这个问题不仅在计算机科学领域有着重要的意义,也在数学和逻辑学中有着深远的影响。

在本实验中,我们将探讨不同解决n皇后问题的方法,并对它们进行实验和比较。

实验方法我们选择了几种常见的解决n皇后问题的算法,包括暴力搜索、回溯法、遗传算法和模拟退火算法。

我们使用Python编程语言实现了这些算法,并在不同规模的n值下进行了实验。

我们记录了每种算法的运行时间、内存占用和解的质量,并进行了对比分析。

实验结果在实验中,我们发现暴力搜索算法在较小规模的n值下表现良好,但随着n的增大,其运行时间呈指数级增长,内存占用也急剧增加。

回溯法在中等规模的n值下表现较好,但在大规模n值下也存在性能问题。

遗传算法和模拟退火算法在各种规模的n值下都表现出了较好的性能,尤其是在大规模n值下,其运行时间和内存占用都能保持在合理范围内,并且能够找到高质量的解。

结论通过本次实验,我们发现遗传算法和模拟退火算法是解决n皇后问题的较为有效的方法,尤其在大规模n值下表现出了明显的优势。

这些算法能够在合理的时间内找到高质量的解,对于解决实际问题具有一定的实用性。

同时,我们也意识到在选择解决n皇后问题的算法时,需要根据具体情况来进行选择,不能一概而论。

希望本实验能够为解决n皇后问题提供一些参考和启发。

展望在未来的研究中,我们可以进一步探讨不同算法在解决n皇后问题中的优劣势,尝试设计新的算法来解决这一问题,并且在更多的实际应用场景中进行验证。

同时,我们也可以将这些算法应用到其他类似的组合优化问题中,以期能够找到更加通用和高效的解决方法。

希望通过这些努力,能够为计算机科学和数学领域的发展做出一些贡献。

回溯法实验(n皇后问题)(迭代法)

回溯法实验(n皇后问题)(迭代法)

算法分析与设计实验报告第三次附加实验附录:完整代码(回溯法)//回溯算法递归回溯n皇后问题#include<iostream>#include<time.h>#include<iomanip>#include"math.h"using namespace std;class Queen{friend int nQueen(int); //定义友元函数,可以访问私有数据private:bool Place(int k); //判断该位置是否可用的函数void Backtrack(int t); //定义回溯函数int n; //皇后个数int *x; //当前解long sum; //当前已找到的可行方案数};int main(){int m,n;for(int i=1;i<=1;i++){cout<<"请输入皇后的个数:"; //输入皇后个数cin>>n;cout<<"皇后问题的解为:"<<endl;clock_t start,end,over; //计算程序运行时间的算法start=clock();end=clock();over=end-start;start=clock();m=nQueen(n); //调用求解的函数cout<<n<<"皇后问题共有";cout<<m<<"个不同的解!"<<endl; //输出结果end=clock();printf("The time is %6.3f",(double)(end-start-over)/CLK_TCK); //显示运行时间cout<<endl;}system("pause");return 0;}bool Queen::Place(int k)//传入行号{for(int j=1;j<k;j++){if((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k]))//如果两个在同一斜线或者在同一列上,说明冲突,该位置不可用{return false;}}return true;}void Queen::Backtrack(int t){if(t>n){sum++;/*for(int i=1;i<=n;i++) //输出皇后排列的解{cout<<x[i]<<" ";}cout<<endl;*/}else{//回溯探索第i行的每一列是否有元素满足要求for(int i=1;i<=n;i++){x[t]=i;if(Place(t)){Backtrack(t+1);}}}}int nQueen(int n){Queen X; //定义Queen类的对象X//初始化XX.n=n;X.sum=0;int *p=new int[n+1]; //动态分配for(int i=0;i<=n;i++) //初始化数组{p[i]=0;}X.x=p;X.Backtrack(1);delete[] p;return X.sum;//输出解的个数}完整代码(回溯法)//回溯算法迭代回溯n皇后问题#include<iostream>#include<time.h>#include<iomanip>#include"math.h"using namespace std;class Queen{friend int nQueen(int); //定义友元函数private:bool Place(int k); //定义位置是否可用的判断函数void Backtrack(void); //定义回溯函数int n; // 皇后个数int *x; // 当前解long sum; // 当前已找到的可行方案数};int main(){int n,m;for(int i=1;i<=1;i++){cout<<"请输入皇后的个数:";cin>>n;cout<<n<<"皇后问题的解为:"<<endl;clock_t start,end,over; //计算程序运行时间的算法start=clock();end=clock();over=end-start;start=clock();m=nQueen(n); //调用求解皇后问题的函数cout<<n<<"皇后问题共有";cout<<m<<"个不同的解!"<<endl;end=clock();printf("The time is %6.3f",(double)(end-start-over)/CLK_TCK); //显示运行时间cout<<endl;}system("pause");return 0;}bool Queen::Place(int k){for (int j=1;j<k;j++){if ((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k])) //如果两个皇后在同一斜线或者在同一列上,说明冲突,该位置不可用{return false;}}return true;}void Queen::Backtrack() //迭代法实现回溯函数{x[1] = 0;int k = 1;while(k>0){x[k] += 1; //先将皇后放在第一列的位置上while((x[k]<=n)&&!(Place(k))) //寻找能够放置皇后的位置{x[k] += 1;}if(x[k]<=n) //找到位置{if(k == n) //如果寻找结束输出结果{/*for (int i=1;i<=n;i++){cout<<x[i]<<" ";}cout<<endl; */sum++;}else//没有结束则找下一行{k++;x[k]=0;}}else//没有找到合适的位置则回溯{ k--; }}}int nQueen(int n){Queen X; //定义Queen类的对象X//初始化XX.n=n;X.sum=0;int *p=new int[n+1];for(int i=0;i<=n;i++){p[i]=0;}X.x=p;X.Backtrack();delete []p;return X.sum; //返回不同解的个数}。

n后问题实验报告

n后问题实验报告

n后问题实验报告n后问题实验报告引言:在计算机科学领域中,n后问题是一个经典的数学难题,也是一个常见的回溯算法练习题。

本实验旨在通过编写程序解决n后问题,探索回溯算法的应用和性能。

实验设计:本实验采用Python编程语言,设计一个递归函数来解决n后问题。

通过不断尝试不同的放置方式,直到找到所有合法解。

实验步骤:1. 设计一个函数check(row, col, queens),用于检查当前位置是否可以放置皇后。

2. 设计一个函数solve(n),用于解决n后问题。

在该函数中,使用一个列表queens来存储每一行皇后的位置。

3. 在solve函数中,使用递归的方式进行回溯。

对于每一行,尝试将皇后放置在不同的列上,并调用check函数进行合法性检查。

4. 如果当前位置合法,则将皇后放置在该位置,并递归调用solve函数解决下一行。

5. 如果成功找到一个合法解,则将该解存储在一个列表solutions中。

6. 最后,输出所有的合法解。

实验结果:经过实验,我们成功解决了n后问题,并得到了所有合法解。

以下是一些实验结果的示例:对于n=4的情况,共有两个合法解:- 第一个解:[1, 3, 0, 2]皇后位置:Q - - -- - - Q- Q - -- - Q -- 第二个解:[2, 0, 3, 1]皇后位置:- Q - -Q - - -- - - Q- - Q -对于n=8的情况,共有92个合法解。

由于篇幅限制,我们无法一一列举,但以下是其中一个解的示例:- 解:[0, 4, 7, 5, 2, 6, 1, 3]皇后位置:Q - - - - - - -- - - - Q - - -- - - - - - - Q- - - - - Q - -- - Q - - - - -- - - - - - Q -- Q - - - - - -- - - Q - - - -讨论与结论:通过本次实验,我们成功地解决了n后问题,并得到了所有合法解。

实验十 n皇后问题

实验十  n皇后问题

算法设计与分析实验报告姓名:杨勇涛班级:计科102一、实验名称:n皇后问题时间:2012年4月25日,星期三,第四节地点:12#311二、实验目的及要求在n*n格的棋盘上放置彼此不受攻击的n皇后。

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列后统一斜线上的棋子。

N皇后问题等价于在n*n格的棋盘上放置n个皇后,任何2个皇后不放在同一行同一列或同一列统统一些线上。

三、实验环境VC++四、实验内容从键盘上输入n皇后的数目,输出所有的结果五、算法描述及实验步骤N×N皇后问题的求解过程就是一个试探回逆的过程。

如图-1(图1-1)1、首先查找第一行的可放位置,第一行全部可以放,那么我们就先将第一个皇后放在(0,0)点。

(图1-2)2、再查找第二行,由于第一行的(0,0)已经放了皇后,故第二行的(1,0)和(1,1)都能放皇后了,可放的就是(1,2)和(1,3)点,在(1,2)放上皇后。

(图1-3)3、再查找第三行,查找所以发现第三行没有可放的位置了,回逆到第二行讲皇后放到(1,3)再查找第3行。

如果还不行,就回到第一行将第一行的皇后放人下一个可放的点,依次类推,查找N×N上的所以可放的位置,直到第一行所以位置被放完,输出结果。

4、根据上面的规律可以发现,对于一个皇后放在坐标(x,y),它的下一行位置为(x-1,y)(x,y)(x+1,y)的坐标都不能再放皇后。

我们用一个数组来存放本行能放皇后的点。

用循环来查找上面行对本行的影响六、调试过程及实验结果七、总结回溯法有“通用的解题法”之称。

用它可以系统的搜索一个问题的所有解或任一解。

回溯法是一个既带有系统性又带有跳跃性的搜索算法。

八、附录(源程序清单)#include "math.h"#include <iostream>using namespace std;bool valid(int i,int j);//判断安置元素的合法性void trial(int i); //递归安置元素void print(); //显示布局int q; //皇后数int *a; //存储布局元素int count = 0; //合法布局的序号int main(int argc, char* argv[]){cout<<"请输入皇后数:"<<endl;cin>>q;a = new int[q*q];for(int j=0;j<q*q;j++)a[j] = 0;trial(0);cout<<"布局完毕"<<endl;return 0;}void trial(int i) //递归安置元素{if(i>=q)print();elsefor(int j=0;j<q;j++){a[i*q+j] = 1;if(valid(i,j))trial(i+1);a[i*q+j] = 0;}}bool valid(int i,int j) //判断安置元素的合法性{bool b=true;for(int i1=0;i1<i;i1++)for(int j1=0;j1<q;j1++)if(a[i1*q+j1]==1){if(j1==j)//判断是否在同一列b = false;else if(abs(i-i1)==abs(j-j1))//判断是否在对角线b = false;}return b;}void print() //显示布局{count++;cout<<"第"<<count<<" 种布局:"<<endl;for(int m=0;m<q;m++){for(int n=0;n<q;n++){cout<<a[m*q+n]<<" ";}cout<<endl;}cout<<"----------------------------------------"<<endl; }。

n皇后 实验报告

n皇后 实验报告

n皇后实验报告n皇后实验报告引言:n皇后问题是一个经典的数学问题,其目标是在一个n×n的棋盘上放置n个皇后,使得它们互不攻击。

本实验旨在通过编程实现n皇后问题的解法,并对不同的算法进行性能分析。

实验方法:本实验采用Python语言编写程序,实现了两种常见的解法:回溯法和遗传算法。

回溯法是一种穷举搜索的方法,通过不断尝试每一种可能的放置方式,直到找到满足条件的解;而遗传算法则是通过模拟生物进化的过程,利用选择、交叉和变异等操作逐步优化解的质量。

实验结果:在实验中,我们分别测试了回溯法和遗传算法在不同规模的n皇后问题上的性能表现。

以下是实验结果的总结:1. 回溯法:- 对于规模较小的问题(n<10),回溯法可以在短时间内找到所有解,并输出结果。

- 随着问题规模的增大,回溯法的搜索时间呈指数级增长。

当n=15时,搜索时间已经超过10秒。

- 回溯法在解决大规模问题时,遇到了组合爆炸的问题,无法在合理的时间内得出结果。

2. 遗传算法:- 遗传算法对于规模较小的问题表现不如回溯法,因为其需要较长的时间来找到一个较优解。

- 随着问题规模的增大,遗传算法的性能逐渐超过回溯法。

当n=20时,遗传算法能够在合理的时间内找到一个较优解。

- 遗传算法在解决大规模问题时,相比回溯法有明显的优势,因为其搜索时间增长较慢。

实验讨论:通过对实验结果的分析,我们可以得出以下结论:- 回溯法适用于规模较小的n皇后问题,但在大规模问题上的性能不佳。

- 遗传算法在大规模问题上表现较好,但对于规模较小的问题需要更长的时间来找到较优解。

- 遗传算法的性能受到参数设置的影响,不同的选择、交叉和变异策略可能导致不同的结果。

结论:综上所述,回溯法和遗传算法都是解决n皇后问题的有效方法,但在不同规模的问题上有不同的性能表现。

在实际应用中,我们可以根据问题规模选择合适的算法来求解。

对于规模较小的问题,回溯法可以提供精确的解;而对于大规模问题,遗传算法能够在合理的时间内找到较优解。

n皇后问题实验报告

n皇后问题实验报告

N后问题算法一、实验目的及要求所要涉及或掌握的知识:1. 了解皇后相互攻击的条件:如果任意两个皇后在同一行,同一列或同一对角线,则她们相互攻击。

2. 运用迭代的方法实现6皇后问题,求解得到皇后不相互攻击的一个解3. 在运用迭代的方法实现编程时,要注意回溯点二、问题描述及实验内容对6皇后问题求解,用数组c[1…6]来存皇后的位置。

c[i]=j表示第i个皇后放在第j列。

最后程序运行的结果是c[1…6]={1,5,8,6,3,7 }三、问题分析和算法描述6-QUEENS的算法表示:输入:空。

输出:对应于6皇后问题的解的向量c[1…6]={1,5,8,6,3,7}1. for k=1 to 62. c[k]=0 //没有放皇后3. end for4. flag=false5. k=16. while k>=17.while c[k]<=58.c[k]=c[k]+19.if c为合法着色 then set flag=ture 且从两个while循环退出10.else if c是部分解 then k=k+111.end while12. c[k]=0 //回溯并c[k]=013. k=k-114. end while15. if flag then output c16. else output “no solution”四、具体实现# include <math.h>#include <time.h>#include <stdlib.h>#include <stdio.h>#include "iostream"using namespace std;int total = 0; //方案计数void backtrace(int queen[],int N){int i, j, k;cout<<"★为皇后放置位置\n";for (i=1;;){ //首先安放第1行if(queen[i]<N){ //皇后还可调整k=0; //检查与第k个皇后是否互相攻击while(k<i&&abs(queen[k]-queen[i])&&(abs(queen[k]-queen[i])-abs(k-i))) k++;if (k<=i-1){ //与第k个皇后互相攻击queen[i]++; //第i个皇后右移一列,重测continue;}i++; //无冲突,安置下一行皇后if(i<N) continue;cout<<"第"<<total+1<<"种为:\n";for(int i=0;i<N;i++){for(int j=0;j<queen[i];j++)cout<<"□";cout<<"★";for(int k=queen[i]+1;k<N;k++)cout<<"□";cout<<endl;}total++; //方案数加1if(total%5==0) cout<<endl;queen[N-1]++; // 将第8个皇后右移一列,前8个不动i=N-1; //此处是制造机会,如不成功则回溯,关键一步}else //当前行皇后无法安置,回溯{queen[i]=0; //当前行皇后回归1列i--; //回溯到前一行皇后if(i<0){ //回溯到数组1行之前,结束cout<<"\n针对 "<<N<<" 皇后问题,"<<"一共找到 "<<total<<" 种放置方法。

n皇后 实验报告

n皇后 实验报告

n皇后实验报告n皇后实验报告引言:n皇后问题是一个经典的数学问题,旨在找到在一个n×n的棋盘上放置n个皇后,使得它们互不攻击。

这个问题涉及到了组合数学、图论和计算机算法等多个领域,具有一定的难度和挑战性。

本实验旨在通过不同的算法和策略来解决n皇后问题,并对它们的效率和性能进行评估。

实验一:暴力法暴力法是最简单直接的解决方法之一。

它通过穷举法遍历所有可能的皇后放置方式,并检查是否满足条件。

具体步骤如下:1. 生成一个空的n×n棋盘。

2. 从第一行开始,依次尝试将皇后放置在每个格子上。

3. 如果当前格子可以放置皇后,则继续下一行;否则,回溯到上一行,重新选择一个可行的格子。

4. 当所有行都放置了皇后时,找到了一个解,记录下来。

5. 继续尝试下一个可能的放置方式,直到遍历完所有情况。

实验结果显示,暴力法在小规模问题上表现良好,但在n较大时,其时间复杂度呈指数级增长,运行时间非常长。

实验二:回溯法回溯法是一种优化的解决方法,它通过剪枝操作来减少不必要的搜索。

具体步骤如下:1. 生成一个空的n×n棋盘。

2. 从第一行开始,依次尝试将皇后放置在每个格子上。

3. 如果当前格子可以放置皇后,则继续下一行;否则,回溯到上一行,重新选择一个可行的格子。

4. 当所有行都放置了皇后时,找到了一个解,记录下来。

5. 在每次尝试放置皇后时,通过检查当前格子所在的行、列和对角线上是否已经有皇后,来判断是否满足条件。

6. 在每次回溯时,可以通过剪枝操作来减少搜索的空间。

实验结果显示,回溯法相较于暴力法有了一定的提升,但在n较大时,仍然存在一定的时间复杂度问题。

实验三:优化算法为了进一步提高解决n皇后问题的效率,我们尝试了一些优化算法。

其中,一种比较常见的优化算法是基于位运算的方法。

1. 生成一个空的n×n棋盘。

2. 使用一个n位的二进制数来表示每一行上的皇后位置,其中1表示有皇后,0表示没有皇后。

n皇后 实验报告

n皇后 实验报告

n皇后问题实验报告1. 引言n皇后问题是一个经典的组合优化问题,旨在找到如何在一个n × n的棋盘上放置n个皇后,使得任意两个皇后不在同一行、同一列或同一对角线上。

这个问题可以通过回溯算法来解决。

在本实验报告中,我们将详细介绍n皇后问题,并提供一个实现回溯算法解决该问题的步骤。

2. 算法步骤以下是解决n皇后问题的步骤:2.1 初始化首先,我们需要定义一个n × n的棋盘,并初始化所有位置为空。

2.2 递归回溯接下来,我们使用递归回溯来找到合适的解决方案。

我们从第一行开始,逐个尝试在每个位置放置一个皇后。

2.2.1 判断位置是否合法在放置皇后之前,我们需要判断当前位置是否符合规则。

判断的条件包括当前位置所在的行、列以及对角线上是否已经存在其他皇后。

如果存在冲突,则需要尝试下一个位置。

2.2.2 放置皇后如果当前位置合法,我们将在该位置放置一个皇后,并继续递归地尝试下一行。

2.2.3 回溯如果放置皇后后无法找到合适的解决方案,我们需要回溯到上一行,将上一行的皇后位置向后移动一位,并尝试下一个位置。

2.3 输出解决方案当找到一个合适的解决方案时,我们输出棋盘的状态,显示每个位置是否有皇后。

2.4 继续寻找其他解决方案如果还存在其他解决方案,我们将继续递归回溯,直到找到所有的解决方案。

3. 实验结果经过实验,我们使用回溯算法成功解决了n皇后问题。

对于不同的n值,我们找到了所有的解决方案并进行了输出。

以下是几个n皇后问题的解决方案示例:3.1 n = 4- Q - -- - - QQ - - -- - Q -3.2 n = 8Q - - - - - - -- - - - Q - - -- - - - - - - Q- - - - - Q - -- - Q - - - - -- - - - - - Q -- Q - - - - - -- - - Q - - - -4. 总结通过本实验,我们了解了n皇后问题,并学习了回溯算法的应用。

n皇后问题实验报告材料

n皇后问题实验报告材料

N后问题算法一、实验目的及要求所要涉及或掌握的知识:1. 了解皇后相互攻击的条件:如果任意两个皇后在同一行,同一列或同一对角线,则她们相互攻击。

2. 运用迭代的方法实现6皇后问题,求解得到皇后不相互攻击的一个解3. 在运用迭代的方法实现编程时,要注意回溯点二、问题描述及实验内容对6皇后问题求解,用数组c[1…6]来存皇后的位置。

c[i]=j表示第i个皇后放在第j列。

最后程序运行的结果是c[1…6]={1,5,8,6,3,7 }三、问题分析和算法描述6-QUEENS的算法表示:输入:空。

输出:对应于6皇后问题的解的向量c[1…6]={1,5,8,6,3,7}1. for k=1 to 62. c[k]=0 //没有放皇后3. end for4. flag=false5. k=16. while k>=17. while c[k]<=58. c[k]=c[k]+19. if c为合法着色 then set flag=ture 且从两个while循环退出10. else if c是部分解 then k=k+111. end while12. c[k]=0 //回溯并c[k]=013. k=k-114. end while15. if flag then output c16. else output “no solution”四、具体实现# include <math.h>#include <time.h>#include <stdlib.h>#include <stdio.h>#include "iostream"using namespace std;int total = 0; //方案计数void backtrace(int queen[],int N){int i, j, k;cout<<"★为皇后放置位置\n";for (i=1;;){ //首先安放第1行if(queen[i]<N){ //皇后还可调整k=0; //检查与第k个皇后是否互相攻击while(k<i&&abs(queen[k]-queen[i])&&(abs(queen[k]-queen[i])-abs(k-i))) k++;if (k<=i-1){ //与第k个皇后互相攻击queen[i]++; //第i个皇后右移一列,重测continue;}i++; //无冲突,安置下一行皇后if(i<N) continue;cout<<"第"<<total+1<<"种为:\n";for(int i=0;i<N;i++){for(int j=0;j<queen[i];j++)cout<<"□";cout<<"★";for(int k=queen[i]+1;k<N;k++)cout<<"□";cout<<endl;}total++; //方案数加1if(total%5==0) cout<<endl;queen[N-1]++; // 将第8个皇后右移一列,前8个不动i=N-1; //此处是制造机会,如不成功则回溯,关键一步}else //当前行皇后无法安置,回溯{queen[i]=0; //当前行皇后回归1列i--; //回溯到前一行皇后if(i<0){ //回溯到数组1行之前,结束cout<<"\n针对 "<<N<<" 皇后问题,"<<"一共找到 "<<total<<" 种放置方法。

n皇后的实验报告

n皇后的实验报告

09级计算机科学与技术2班组长:郭惠芝40912091小组成员:席菲菲40912098闫卫红40912099王铝红40912103回溯法----------n皇后问题王铝红,郭惠芝,席菲菲,闫卫红(陕西师范大学计算机科学学院陕西西安710062)摘要:文章中对“八皇后问题”进行了分析,给出了一种回溯算法解决“八皇后问题”并用C++语言实现,从而上升为对“n皇后问题”的解决。

关键字:回溯法,八皇后问题,算法,实现Eight Queens PuzzleAbstract: Article in the “Eight Queens Puzzle” issues were analyzed and given an iteration method to solve “Eight Queen Puzzle” and use C ++ language implementation.Keywords:Iteration method , Eight Queens Puzzle, Algorithm, Implementation中心内容:1、问题描述八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。

该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

高斯认为有76种方案。

1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论比较特殊的是,皇后6x6棋盘的解比5 x 5少,其余解的数目随着皇后数目增加。

但似乎无数学表达式可以描述。

2、模型建立下面以8皇后为例建立模型,让大家更清楚的理解n皇后问题。

不妨设8个皇后为X i,她们分别在第i行(i=1,2,3,4,…,8),这样问题的解空间,就是一个8个皇后所在列的序号,为n元一维向量(X1 ,X2 ,X3,X4,X5 ,X6 ,X7 ,X8),搜索空间是1≦X i≦8(i=1,2,3,4,…,8),共88个状态。

算法实验报告

算法实验报告
printf("\nMemory full!\n"); getchar(); exit(-1); }
size=MAX; n=0; printf("\nPlease input the Max weight(0 or negative numbers to exit)\n");
- 10 -
计算机算法实验报告
fflush(stdin); getchar(); } }
-7-
0/1 背包问题:
计算机算法实验报告
一 实验内容描述和功能分析
内容描述
已知有 N 种物品,和一个可以容纳 M 重量的背包,每种第 i 号的物品重量为 wi,假定物品 的每一部分 Xi 放入背包就会得到 Pi*Xi 的效益,这里 Xi=0 or 1,Pi>=0。要求出一种算法使 装入背包之物品的效益值达到最大值。
计算机算法实验报告
<<计算机算法基础>>实验报告
姓名: 学号: 专业: 班级:
报告日1-
计算机算法实验报告
目录
N 皇后问题
一、实验内容描述和功能分析 二、算法过程设计 三、程序调试及结果(附截图) 四、源代码(附源程序)
0/1 背包问题
一、实验内容描述和功能分析 二、算法过程设计 三、程序调试及结果(附截图) 四、源代码(附源程序)
if(!pp&&!ww) goto A;
while(pp!=0&&ww!=0) //当输入的都是 0 时,进行中断操作 {
p[n]=pp;w[n]=ww; n++; printf("Please input the price of %d bag\n",n+1); scanf("%f",&pp); printf("Please input the weight of %d bag\n",n+1); scanf("%f",&ww);

n后问题实验报告

n后问题实验报告

一.实验目的1. 了解皇后相互攻击的条件:如果任意两个皇后在同一行,同一列或同一对角线,则她们相互攻击。

2. 运用迭代的方法实现n皇后问题,求解得到皇后不相互攻击的一个解二.实验内容基本思路:用n元组x[1:n]表示n后问题的解,其中x[i]表示第i个皇后放在棋盘的第i行的第x[i]列。

抽象约束条件得到能放置一个皇后的约束条件:(1)x[i]!=x[k]; (2)abs(x[i]-x[k])!=abs(i-k)。

应用回溯法,当可以放置皇后时就继续到下一行,不行的话就返回到第一行,重新检验要放的列数,如此反复,直到将所有解解出。

在回溯法中,递归函数Backtrack(1)实现对整个解空间的回溯搜索。

Backtrack(i)搜索解空间的第i层子树。

类Queen的数据成员记录解空间的节点信息,以减少传给Backtrack函数的参数。

sum记录当前已找到的可行方案数。

运用回溯法解题通常包含以下三个步骤:(1)针对所给问题,定义问题的解空间;(2)确定易于搜索的解空间结构;(3)以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。

源代码:#include<iostream>using namespace std;class Queen{friend int nQueen(int);private:bool Place(int k);void Backtract(int t);int n,*x;long sum; //可行方案数};bool Queen::Place(int k){for(int j=1;j<k;j++)if((abs(k-j)==abs(x[j]-x[k]))||(x[j]==x[k])) return false;return true;}void Queen::Backtract(int t){if (t>n){sum++;cout<<"第"<<sum<<"种方法:";for(int i=1;i<=n;i++)cout<<x[i]<<" ";cout<<endl;}else{for(int i=1;i<=n;i++){x[t]=i;if(Place(t)) Backtract(t+1);}}}int nQueen(int n){Queen X;X.n=n;X.sum=0;int *p=new int[n+1];for(int i=0;i<=n;i++)p[i]=0;X.x=p;X.Backtract(1);delete []p;return X.sum;}void main(){int n,m;cout<<"请输入皇后个数:";cin>>n;m=nQueen(n);cout<<endl;cout<<"有"<<m<<"种可行方法"<<endl; }三.实验的结果及分析……………四.实验心得体会通过这次实验理解了回溯法的基本思想:确定了解空间的组织结构后,回溯法就从开始结点(根结点)出发,以深度优先的方式搜索整个解空间。

算法快速排序01背包N皇后问题实验报告

算法快速排序01背包N皇后问题实验报告

算法分析与设计实验报告姓名:专业班级学号:学院:信息科学与工程实验一:快速排序实验实验目的理解递归算法的思想和递归程序的执行过程,并能熟练编写递归程序。

掌握分治算法的思想,对给定的问题能设计出分治算法予以解决。

实验预习内容编程实现讲过的例题:二分搜索、合并排序、快速排序。

对本实验中的问题,设计出算法并编程实现。

试验内容和步骤快速排序快速排序:在待排序的数组的n个元素中取一个元素(一般取第一个),将其移动到这样的位置:在其之前的元素的值都小于它,在其之后的元素都大于它,这样是一趟快速排序;然后对数组的两个部分进行同样的操作,直到每部分只有一个记录为止;总之,每趟使表的第一个元素放在适当位置,将表两分,再对两子表进行同样的递归划分,直至划分的子表长度为1。

一、递归程序执行的过程1 实现快速排序的实现基于分治法,具体分为三个步骤。

假设待排序的序列为L[m..n]。

分解:序列L[m .. n]被划分成两个可能为空的子序列L[m .. pivot-1]和L[pivot+1 .. n],使L[m .. pivot-1]的每个元素均小于或等于L[pivot],同时L[pivot+1.. n]的每个元素均大于L[pivot]。

其中L[pivot]称为这一趟分割中的主元(也称为枢轴、支点)。

解决:通过递归调用快速排序,对子序列L[m .. pivot-1]和L[pivot+1 .. r]排序。

合并:由于两个子序列是就地排序的,所以对它们的合并不需要操作,整个序列L[m .. n]已排好序。

2.概述快速排序(Quick Sort)是一种有效的排序算法。

虽然算法在最坏的情况下运行时间为O(n^2),但由于平均运行时间为O(nlogn),并且在内存使用、程序实现复杂性上表现优秀,尤其是对快速排序算法进行随机化的可能,使得快速排序在一般情况下是最实用的排序方法之一。

快速排序被认为是当前最优秀的内部排序方法。

3.性质内部排序快速排序是一种内部排序方法。

n皇后问题算法实验报告

n皇后问题算法实验报告

算法分析与设计实验报告实验内容:N皇后问题实验时间:2013.12.3姓名:***班级:计科1101学号:**********一、实验内容及要求在n×n格的棋盘上放置彼此不受攻击的n个皇后,按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。

二、实验目的1.巩固和加深对回溯法的理解2.了解递归和迭代法在回溯法中的应用三、算法分析1.理解皇后不被攻击的条件:n后问题等价于在n*n格的棋盘上放置n个皇后,任何两个皇后不能放在同一行或同一列或同一斜线上。

2.算法模块简要分析用数组存储皇后的位置,将i设置为0.Int place(*x,n) :数组x[] 用来表示列数,n为皇后个数,用来判断皇后是否被攻击,判断的条件是(x[i]-x[n]==i-n||x[i]-x[n]==n-i||x[i]==x[n])即用来判断“同一行或同一列或同一斜线上”。

Int print(*x,n):打印皇后解的空间。

Int iniprint(*x,n):初始化打印函数,相当于对棋盘初始化。

将可以放皇后的位置记为“1”,不放皇后的位置记为“0”。

Int Nqueen(int n):n皇后问题求解,如果满足一组可行解,sum++。

Int i=0,如果x[i]>=n的时候即进行下一行,i++;当i=n时,sum++;输出该组可行解的个数和位置的矩阵。

并且i--,回溯到上一层继续搜索可行解。

四、运行结果及分析1、三皇后没有可行解2、2.4个皇后有2个可行解3.5皇后有10个可行解五、源代码#include<stdio.h>static int n, sum=0;//可行解个数static int locate[20];int place(int k){//判断是否在一条线上并返回0,1for(int i=1;i<k;i++){if(locate[i] == locate[k] || (i+locate[i])==(locate[k]+k)||(locate[i]-i)==(locate[k]-k))return 0;}return 1;}void Back(int m){if(m>n){sum++;for(int i=1;i<=n;i++){for(int a=1;a<=n;a++){if(a<locate[i]||a>locate[i])printf(" * ");elseprintf(" \2 "); //如果已经安排完毕则输出棋盘和记录}printf("\n");}printf("第%d种解法如上图所示: ",sum);for(int i=1;i<=n;i++)printf("%d ",locate[i]);printf("\n\n\n");}else{//如果没有安排完则递归继续下一个安排,无解则返回上一个for(int i=1;i<=n;i++){locate[m]=i;if(place(m))Back(m+1);}}}int main(){printf("请输入皇后数量:");scanf("%d",&n);printf("\n(\2表示皇后,*表示棋盘)\n\n\n");Back(1);printf("%d个皇后共有以上%d种解法\n\n\n",n,sum);}六、实验心得回溯法有“通用解题法”之称,用它可以搜索问题的所有解。

对n皇后问题进行求解算法的算法描述。

对n皇后问题进行求解算法的算法描述。

对n皇后问题进行求解算法的算法描述。

文章标题:探索N皇后问题的求解算法N皇后问题是一个经典的组合优化问题,它要求在一个N×N的棋盘上放置N个皇后,使得它们互相不攻击。

这个问题在计算机科学和算法设计领域有着重要的地位,它不仅挑战了算法设计者的智慧,而且在实际中有着广泛的应用。

在本文中,我们将深入探讨N皇后问题的求解算法,并尝试用代码实现一个高效的解法。

一、N皇后问题的定义N皇后问题最初来源于围棋界的柯尼斯堡爵士(Carl Friedrich Gauss)在1850年提出。

在N×N的棋盘上放置N个皇后,使得它们不同行、不同列、不同对角线上。

这意味着任意两个皇后之间不能出现攻击的情况,即它们不能位于同一行、同一列或同一对角线上。

二、暴力求解算法最直观的一种解法是暴力穷举法。

我们可以通过递归的方式,对每一行的每一个位置进行搜索,直到找到所有满足条件的解。

这种方法的复杂度是O(N!),随着N的增大,计算量急剧增加,性能是不可接受的。

三、回溯算法回溯算法是一种更加高效的解法。

它利用了剪枝策略,在搜索的过程中及时去掉不可能的解,从而减少了计算量。

我们可以通过递归的方式,依次尝试每一行的每一个位置,如果当前位置符合条件,则继续深入搜索,如果不符合条件,则进行回溯。

回溯算法的复杂度是O(N^N),相比暴力穷举法,性能有了明显的提升。

四、位运算优化除了回溯算法,我们还可以通过位运算的优化来提高算法的效率。

我们可以用一个整数来表示每一行皇后的位置,然后利用位运算的与、或、异或等操作来判断是否有冲突。

这种方法的复杂度是O(1),性能是非常高效的。

五、个人观点和总结总的来看,N皇后问题是一个挑战性很高的问题,它需要我们充分发挥创造力和智慧,不断探索各种求解算法。

在实际应用中,我们可以根据具体的场景和要求来选择合适的算法。

对于小规模的N,暴力穷举法可能是一个不错的选择;对于大规模的N,我们可以考虑采用回溯算法或位运算优化的方法。

数据结构N皇后实验报告

数据结构N皇后实验报告

实验5.1 求解n皇后问题实验要求:编写一个程序exp5—1.cpp,求解皇后问题:在n*n的方格棋盘上,放置n个皇后,要求每个皇后不同行,不同列、不同左右对角线。

要求:(1)皇后的个数n由用户输入,其值不能超过20.采用递归方法求解。

实验过程:按照要求在VC++6.0控制台上编写程序代码如下:#include <stdio.h>#include <stdlib.h>const int N=20; //最多皇后个数int q[N]; //存放各皇后所在的列号int count=0; //存放解个数void print(int n) //输出一个解{count++;int i;printf(" 第%d个解:",count);for (i=1;i<=n;i++)printf("(%d,%d) ",i,q[i]);printf("\n");}int place(int k,int j) //测试(k,j)位置能否摆放皇后{int i=1;while (i<k) //i=1~k-1是已放置了皇后的行{if ((q[i]==j) || (abs(q[i]-j)==abs(i-k)))return 0;i++;}return 1;}void queen(int k,int n) //放置1-k的皇后{int j;if (k>n)print(n); //所有皇后放置结束elsefor (j=1;j<=n;j++) //在第k行上穷举每一个位置if (place(k,j)) //在第k行上找到一个合适位置(k,j){q[k]=j;queen(k+1,n);}}void main(){int n; //n存放实际皇后个数printf(" 皇后问题(n<20) n=");scanf("%d",&n);if (n>20)printf("n值太大,不能求解\n");else{printf(" %d皇后问题求解如下:\n",n);queen(1,n);printf("\n");}}完成后运行显示对话框:输入的是n=6的输出结果是:实验结果分析:(1)按照实验书指定操作,运行结果出现的错误,其实是我们经常犯的错误。

n皇后

n皇后

实验[4][实验题目]:n皇后专业:信息与计算数学学号:姓名:日期:1.实验目的学习递归算法的算法思想,并将其运用在计算机程序中。

2 实验内容首先学习递归算法的思想然后运用递归算法的思想进行程序编译3.算法设计要解决N皇后问题,其实就是要解决好怎么放置这n个皇后,每一个皇后与前面的所有皇后不能在同一行、同一列、同一对角线,在这里我们可以以行优先,就是说皇后的行号按顺序递增,只考虑第i个皇后放置在第i行的哪一列,所以在放置第i个皇后的时候,可以从第1列判断起,如果可以放置在第1个位置,则跳到下一行放置下一个皇后。

如果不能,则跳到下一列...直到最后一列,如果最后一列也不能放置,则说明此时放置方法出错,则回到上一个皇后向之前放置的下一列重新放置。

此即是回溯法的精髓所在。

当第n个皇后放置成功后,即得到一个可行解,此时再回到上一个皇后重新放置寻找下一个可行解...如此后,即可找出一个n皇后问题的所有可行解。

4.程序代码#include <iostream>using namespace std;int p[12][12];//初始化矩阵(矩阵太大回溯法的效率很低,所以该题的数据很小)int result;int n;//矩阵大小void init(int n)//初始化矩阵{for(int i=0;i<n;i++){for(int j=0;j<n;j++)p[i][j]=0;}result=0;}bool issafe(int row,int col)//判断该位置能否放皇后{for(int i=0;i<row;i++){for(int j=0;j<n;j++){if(p[i][j]==1){//判断同行,同列,对角线上是否有皇后if(i==row||j==col||(j-i)==(col-row)||(j+i)==(col+row))return false;}}}return true;}void putqueen(int x)//入皇后{for(int y=0;y<n;y++)//遍历该行每个位置{if(issafe(x,y))//如果可以{p[x][y]=1;//则放皇后if(x<n-1)putqueen(x+1);//如果未到最后一行,在下一行放皇后elseresult++;//否则返回,结果加1}{for(int k=0;k<n;k++)//该步骤很重要,拿走该行上的皇后p[x][k]=0;}}}int main(){cout<<"请输入皇后数:"<<endl;while(cin>>n){init(n);putqueen(0);cout<<n<<"皇后有"<<result<<"解"<<endl;}return 0;}5 运行结果6 结果分析由于100皇后的解太庞大计算机无法快速的计算出答案,故选择了8皇后进行计算,其结果与其他同学程序的结果进行对后数值大小上一致。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法分析与设计实验报告
实验内容:N 皇后问题 实验时间:2013.12.3
姓名:杜茂鹏 班级:计科 1101 学号:0909101605
int level(BinTreeNodlesevt}r*Beutsl,icnBt(rtrTuiontrcaoTetgtert,_eyapNnpetg)oy;oeN_pddinoeeodtd;fde*esreafc*ttrphsB*au{l)ti;cilrn/duh/tT;ciB/lr/tdo1eiTt;u1ea//NcnrNgoto_loiu(fdn(dtnbe*oetpivdlt{(roe(e}TbidpEititrcfrl(ero!-pbmu>tintrTvritgaey-l(>hlpbulteeie,rtrf=xdt)e,=apr{xkextta,)rt;ru{;k,kr)sd+n;tra+;u1t;ac}0txyBpieTNxv},ooidi{ndet&m*lkac)hi}nil(de)}l;s/e/ js+tr}+uj;cBf+BtoB.+Bid.r.L(;+adikTe+taanN=;t[agojB]e[tdkh=l.se+L+eA1e*+]nr.i;dfc=g(d.-[d;{aiB]1a/it;f/a.;t(dkaA[}ia[]>.kBtdB<}=a];aii.T[BLjt+;aNke.+d[Loni;-]aed-g>t)netahg,B[jt*]+h.)wBd+]{avhi;T=otilareiAedi[n(Be.i{dtm;.<Laive=etAoarngi.0[dLgie],e;jt2Ch=n(o{Sg-0ut9q1h,n/kAL])/t)/iL/[;2s1/e1AtA…aABBmf"…,.S(h+Bq"mniLT6m+irsnet8]e&mhBTen),amidn+dtn&a2Ot*acx(7o10u)n+t)0x{11*ixf=0( nT+o1)d*{ex2i_1f c(+(o!uT2/xn/-*10>tx+l2+cxh=1il;+dnx)o&2/d/h&e=tt_(pn!c:To0o//-duw>1enrw*_c2t/wchx-oi0.1ldu;xon)/)1c*t;cinx6o42.1ucleonfmtt+d/+5ap;t-a5//r7iLg9Cihs4ot8lNuet5nmof9ttdreLp4iegme.=h*ap3tMfAmBol(a[aTrTlit]ex(-;(><i2)nAlccetl[ha0i]}ise=l=ds1,0}A…Tc;[yoine2pu<-nT6ein=-yH>12tp)(]Te;v;enn[Co1-A-ti1o3m1d[u]nA)pHin-[/;in(tv-kL21]ene;]1reyais=A+)nef=[+(t-nm(k1Ta])eAT-p){y>nyA;r-p%c2eh…1iAld3e[2,1]3c,2e1oi20Vn0(u3e=bt×n4i{)n3t1a5)B0);,5b20A}{7,B(2ce[2a150,(l0)ds0cn(a20e,a)]×ie[13j1)1cnr2,a17Af2e0A4,i58g2jtB]b1u(B03}(a5r4,21[En)]06a1B;=07A51([}{0]b937S<A/3)56/HaL([06C0c,sT1b3)]uo[A.>81A0c5u,493]cBn<B0.]=taC5H[L8(0,A1De(4g]k/,Aa5>2EBef0,[)Fy,<]*4C[G)G]b[=2B1,,DHk)g+[]e>,I1AEJy,/[<(,81%C1c]-[8,a5bD1)]C>3C]B,D1<[D1]2Bd62,GFc3E>=41A,V5</1I5EdH475,Gf1231>01+0*J5,91<420G4+0e*30G241,7W1d+*787>13P031,4*9<1L74=41f=0+,515a24953>**/546,17<5+15=0g37413,2*0c5572>/4+517,5<6451*g524,0d+3>956,*5<0315f9+2,3e5W12>14P,12*<3L157g+=56,52f13053>105*693}64*1,{73+80217+9596510*77046873+1*71249264+*9503182+79012*176208590=*2092+8123169831731237*793}W2+531P352L5*0313173+s3T3125158*,21T2052=5,2…915W063…303P5,LTS Tini k1i(2i={a1b,2c,d…e…fg}S0)1,1k10in1i011k11k10n+1kk1Pn21>r+0ikm…00…11+1k0s1=0n11+n21K…ru…snkas1l ns,s=nk,nk a11a121a02K1)aru2s2kaa=2l203*:9(a1i+03/1jA2-03aB(3a131+Aa12=3B+42[…0+]3A…+a3aij1+n3inn149-+iH10-41au+jnfi84+fnm4+16a5B8n+58F1544):52=5706305306.986,2T76:0150,D811:00148110683171,F10ST6:06D413S024H515,1H12:007412101402H*1291u60+22f{f7m4*63a2+n58307*71836+21102*72306+722774*0674128+493}*()4+86*312=513219 5:13/5671(130+7822+6261+p03a1+341352+401143,41)p0=83,21a.8425,913,,p66331:121,0A1a24B13G,,CP4pJ9AD3KG21EHD12AFDaJ3GBH,EPaDHKBApGIBM3J2HEKIF1AJMCKCAEFCMFIIM
ab2cad+-b-*+*cae-*fd/b---ec/1dfa/e+fb*(c-d)4-5e./1f44T4T3 4T241F4T0G39T3. 8NF37T3F635T3T433F3F2F31 3F0 2T928F2T72T6 2F52F42F3 22T21F2T01F9 18F17T16F.15F1. 4T.n1132T.T T 31.11F0 F9 5T80kT7k301nT6,02kF,n3k,4n4,05T=,6n32k,.+2F1,5.,F6F,4,16T65,2I65,41I160 631056612066n1i1in 5n9-i+55187.555K6K. 15254^3k1-101502514“5”90n4i18i,nJn, -4Ji74465. “4”4.43.424. 14.0319 138373635 32“3”384ndia1tian3n2n3e-1xi tp13h02e9ad2p7nep2-562>22ie,n40ie1x13t9-a>[mn0e2]2x3-2t1n1eJ22,0J25e16189ni61foi1nr7(nin-its}j=s1+;jp<in;=ti;pwj=+h1+i{ln;e)t(p1+*i6=+=n0ij<;s,n=sf)os=1r+05(pi;nnts}j=1s+;j<pin=;ti;wpj=h+1i+il{ne;)t(p+1*i+4==in0<j;s,=1=sn3s=)+0p;111n2.0n.i1nin1nin-i9n87.-iA6+On=1e1 45n2-1513642 2a6[6m1].-1 COA(nO)D(1O)B8(nO5lno(lgongCB)2D8nA4) Bnn8A2C((A58D)03A7GBC2G4. 37A8A45D7(15B02) 0B35545D6s(58C=31Cr)0e4n)a3C+r51-AO>Dn(8lilB2no0C*nkgnn(r-2De>1ACna)lOi)rnDB=A(k1rOs;er)(eBa=7narO9l-=eor>C-(arg>nleir2nl);aink7r)-ke8>-ad>lrianl=itCnkare;kO,=adl7(irsenm-6-Alk>e>A)rOlDtlie1einn(7aOAk1kr7rA;e([);1nmBdCaDd]meOr[+e41;lnl7Ae(]en4C)2t4te)2eD70s04sA;B;7[343A7][13.1]4/24A6CA.1[057]A[5B5.41].A16CA.72D4hB.17C1C3B1..2392B7.DD2C2.h5.Q+1B72DC1UA.1C.Q.-C4hQ>QU0.fU3Ur2-o1>--Cn>D>ret.rr.=2Ceeah=aar-Qrr1Q-=D7QUU=0.U-1QQ->>0-rU>UferDf-(maor>Co.rnhf0+(n)rtA+o-1t1=1n)((A6=AtD9=m)).mDn(0B/02)(D)(C(B)()B)n6(A+81)A/2D.6174AAn.1(CA0B6A
相关文档
最新文档