Godsaysno 2016-01-01 08:03 采纳率: 33.3%
浏览 2037
已采纳

图,DFS,8皇后问题 思路或者算法

必须用C或C++,用图结构和DFS解决8皇后问题,需要思路或者算法设计,刚学数据结构这门课,有些问题不会

  • 写回答

3条回答 默认 最新

  • devmiao 2016-01-01 08:07
    关注
     #include <iostream>
    #include <math.h>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    
    int mat[8][8];
    
    int ans = 0;
    bool check(int row,int col)
    {
        for(int i=0;i<row;i++)
        {
            //不能同列
            if(mat[i][col])
            {
                return false;
            }
            //不能在同一对角线
            for(int j=0;j<8;j++)
            {
                if(mat[i][j])
                {
                    if( fabs(i - row) - fabs(j - col) == 0)
                    {
                        return 0;
                    }
                    else
                    {
                        break;
                    }
                }
            }
        }
        return true;
    }
    
    int dfs(int row)
    {
        if(row>=8)
        {
            ans++;
            for(int i=0;i<8;i++)
            {
                for(int j=0;j<8;j++)
                {
                    printf("%d ",mat[i][j]);
                }
                printf("\n");
            }
            printf("\n");
        }
    
        for(int col=0;col<8;col++)
        {
            if(check(row,col))
            {
                mat[row][col] = 1;
                dfs(row + 1);
                mat[row][col] = 0;
            }
        }
    }
    int main()
    {
        memset(mat,0,sizeof(mat));
    
        dfs(0);
    
        printf("total = %d\n",ans);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?