⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 001.cpp

📁 包含两个文件
💻 CPP
字号:
#include <iostream.h>
#define N 10 
//变量与函数声明
   int queens_number=N;   
   int place[N];    //place[i]:第i行第place[i]列
   int top = 0; 
   int pop();                     //弹出函数
   void push(int j);              //压入函数
   int judge(int i,int j);        //冲突测试
   void queens(int i,int j);      //试放过程
   void print();                  //打印过程
 
   //主控过程   
   void main()  {   
       cout<<"本程序找10皇后的一个解,使用了堆栈,效率很差"<<endl;
	   queens(0,0); /*从0 行0列开始试放*/  
	   print();
	   char cc;cout<<"请退出.."<<endl;cin>>cc;
   }

   //过程与函数定义
   int pop() {                     //弹出函数
	   return place[--top]; 
   }
   void push(int j) {              //压入函数
	   place[top++]=j;
   }
   int judge(int i,int j){        //冲突测试
       if(j>(queens_number-1))return 0;
       for(int k =i-1;k>=0;k--){   //测试与前几行位置是否冲突            
 		   if(j==place[k]) return 0;           
		   if(i-k==place[k]-j)return 0;           
		   if(i-k==j-place[k]) return  0;		   
       }
       return 1;
   }
   void queens(int i,int j){        //试放过程
      if(i>(queens_number-1))return;        //递归终止
      if(judge(i,j)==0)                     //有冲突
            if(j>=(queens_number-1)) {      //某行最后一列测试失败
                 j=pop( );                  //弹出前一行的列位置
                 queens(i=top,++j);         //试放前一行的下一列
            }
            else                   //不在最后一列
                 queens(i,++j);    //试放本行下一列位置 
    
      else{               //测试成功
        push(j);          //压栈
        queens(i=top,0);   //试放下一行0列位置
      }
   }
   void print()  {       //打印过程
       for(int i=0;i<N;i++)cout<<place[i]<<' ';
	   cout<<endl;
	   //cout<<"行---列\n";
       //do{cout<<top<<"----"<<pop()<<endl;}while(top);
   }     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -