zoukankan      html  css  js  c++  java
  • Uva 167 The Sultan's Successors(dfs)

    题目链接:Uva 167

    思路分析:八皇后问题,采用回溯法解决问题。

    代码如下:

    #include <iostream>
    #include <string.h>
    using namespace std;
    
    const int MAX_N = 10;
    int A[MAX_N];
    int M[MAX_N][MAX_N];
    int num, Max = 0;
    
    
    int is_safe( int row, int col )
    {
        for ( int i = 0; i < row; ++i )
        {
            if ( A[i] == col )
                return false;
            if ( A[i] + i == row + col )
                return false;
            if ( i - A[i] == row - col )
                return false;
        }
    
        return true;
    }
    
    void dfs( int row )
    {
        if ( row == 8 )
        {
            for ( int i = 0; i < 8; ++i )
                num += M[i][A[i]];
            if ( num > Max )
                Max = num;
    
            num = 0;
            return;
        }
        else
        {
            for ( int i = 0; i < 8; ++i )
            {
                if ( is_safe( row , i ) )
                {
                    A[row] = i;
                    dfs( row+1 );
                }
    
            }
        }
    }
    
    int main( )
    {
        int n;
    
        cin >> n;
        while ( n-- )
        {
            num = Max = 0;
            memset( M, 0, sizeof( M ) );
            memset( A, 0, sizeof( A ) );
    
            for ( int i = 0; i <= 7; ++i )
                for ( int j = 0; j <= 7; ++j )
                    cin >> M[i][j];
    
            dfs( 0 );
            printf( "%5d
    ", Max );
        }
    
        return 0;
    }
  • 相关阅读:
    冲刺4
    冲刺3
    冲刺2
    冲刺一
    构建之法阅读笔记04
    数组02开发日志
    进度条第七周
    《构建之法》阅读问题
    软件工程概论第一节
    《大道至简》弟七八章读后感
  • 原文地址:https://www.cnblogs.com/tallisHe/p/4027893.html
Copyright © 2011-2022 走看看