回溯法求解八皇后问题

        根据实验课上的程序自己用Java语言改写的,没什么太大的技术含量,贴上来保留而已。

程序代码 程序代码

import java.math.*;
import java.io.*;

public class Test {
    
    static int N=8;
    
    private int[] Queen=new int[N+1];
    private int _ResultCount;
    
    public Test()
    {
        _ResultCount=0;    
        for(int i=1;i<=N;i++)
        {
            Queen[i]=0;
        }
    }
    
    private boolean Place(int k) 
    {
        
        for(int i=1;i<k;i++)
        {
            if(Queen[i]==Queen[k] || Math.abs(Queen[i]-Queen[k])==Math.abs(i-k))
            {
                return false;
            }        
        }
        
        return true;    
        
    }
    
    private void PrintResult()
    {
        _ResultCount++;
        System.out.print("第"+_ResultCount+"组解是:");
        for(int i=1;i<=N;i++)
        {
            System.out.print(Queen[i]+"  ");
        }
        System.out.println();
    }

    
    private void Queens()
    {
        int k=1;//Queen[k]=0;  //k表示的是第几行 Queen[k]表示的是第k行的皇后放在的列数
        
        while(k>=1)
        {
            Queen[k]++;
            while(Queen[k]<=N && Place(k)==false)
            {
                Queen[k]++;  //寻找该行可放皇后的位置
            }
            
            if(Queen[k]<=N)  //如果找到了可以放皇后的位置
            {
                if(k==N) //如果全部的位置都已经放好了皇后,则输出解
                {
                    PrintResult();
                }
                else  //向下搜索
                {
                    k++;  
                }
            }
            else
            {
                Queen[k]=0; //恢复前面的值,重要
                k--;  //回溯 ,在该行不能放皇后的情况下
            }
        }
        
    }
    
                 ///实验,已知几个皇后的位置,求是否可以在第八行放入一个皇后
    private void ShiYan()    
    {
        Queen[1]=4;
        Queen[2]=6;
        Queen[3]=8;
        Queen[4]=2;
        Queen[5]=7;
        Queen[6]=1;
        Queen[7]=3;
        
        for(int i=1;i<=N;i++)
        {
            Queen[8]=i;
            if(Place(8))
            {
                PrintResult();
            }
            else
            {
                Queen[8]=0;
            }
        }
        
        
    }
    
    public static void main(String[] args) 
    {
        Test test=new Test();
        
        //test.Queens();     //这句是求解所有的解
        test.ShiYan();        //这句是实验要求,已知几个皇后的位置,求是否可以在第八行放入一个皇后

    }

}





[本日志由 随风 于 2007-07-05 03:31 PM 编辑]
文章来自: 本站原创
引用通告地址: http://www.fenglog.com/blog/trackback.asp?tbID=275
Tags: 八皇后 Java 算法 回溯
评论: 0 | 引用: 0 | 查看次数: 4394
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码: 验证码
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 关闭 | [img]标签 关闭