张运涛

c++

   :: 首页 :: 联系 :: 聚合  :: 管理

常用链接

留言簿(4)

搜索

  •  

最新评论

#include <cmath>
#include 
<iostream>
#include 
<fstream>
using namespace std;

const int N=8;                                    //默认为八皇后.
int count=0;
void Display(int * RowLoc,ostream &c)
{
    
    c
<<"---------------"<< ++count <<"-------"<<endl;
    
for (int i=0;i<N;i++)
    
{
        
for (int j=0;j<N;j++)
        
{
            c
<< (RowLoc[i]==? " 1 ":" 0 ");
        }

        c
<<endl;
    }

    c
<<"------------------------------------"<<endl;
}


//核心函数,从那图(邻接矩阵)的深度遍历中体会到.Prim项目中,那找二点中最短路径的算法

void Queue(int * RowLoc,ostream & c,int nRow=0)                //RowLoc保存每一行中,皇后所在的位置,下标从0开始.  nRow表示将要填充第nRow+1行
{
    
if (nRow==N)                                //填充到第八行了,结束.递归返回
    {
        Display(RowLoc,c); 
        
return;
    }

                                                    
    
for (int col =0;col<N;col++)                //每一行从左到右填充,共N次
    {
                                                
//看第nRow行与它前面的几行是否有冲突
        for (int RowBefore=0;RowBefore<nRow;RowBefore++)
        
{
                                                
//当前要放点(nRow,col)与它前面行(RowBefore,RowLoc[RowBefore])皇后检测,
            if (abs(col-RowLoc[RowBefore])==abs(nRow-RowBefore) || col==RowLoc[RowBefore])
                
goto nextcol;                //不能放置在此.测试同行下一列的位置
        }

            RowLoc[nRow]
=col;                    //当前行放置成功,开始填下一行
            Queue(RowLoc,c,nRow+1);
    nextcol:;
    }

}


void main()
{
    
int temp[N]={0};
    ofstream f;
    f.open(
"list.txt");
    
if (f.is_open())
    
{
        Queue(temp,cout);
        Queue(temp,f);
        cout
<<"Succeed write data to  \"list.txt\" file\n"<<endl;
    }

    f.close();
    system(
"pause");
}

posted on 2010-04-11 12:38 张运涛 阅读(213) 评论(0)  编辑 收藏 引用 所属分类: 算法学习

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理