zoukankan      html  css  js  c++  java
  • 骑士周游

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    #define N 6
    
    int a[N][N] = { 0 };
    
    bool judge(int a[][N], int b, int c, int dir)
    {
        if (dir == 0)
        {
            if (b - 2 >= 0 && c - 1 >= 0 && a[b - 2][c - 1] == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    
        if (dir == 1)
        {
            if (b - 1 >= 0 && c - 2 >= 0 && a[b - 1][c - 2] == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    
        if (dir == 2)
        {
            if (b - 2 >= 0 && c + 1 <= N-1 && a[b - 2][c + 1] == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    
        if (dir == 3)
        {
            if (b - 1 >= 0 && c + 2 <= N-1 && a[b - 1][c + 2] == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    
        if (dir == 4)
        {
            if (b + 2 <= N-1 && c - 1 >= 0 && a[b + 2][c - 1] == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    
        if (dir == 5)
        {
            if (b + 1 <= N-1 && c - 2 >= 0 && a[b + 1][c - 2] == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    
        if (dir == 6)
        {
            if (b + 2 <= N-1 && c + 1 <= N-1 && a[b + 2][c + 1] == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    
        if (dir == 7)
        {
            //cout << "dir = 7
    ";
            if (b + 1 <= N-1 && c + 2 <= N-1 && a[b + 1][c + 2] == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
    
    void print()
    {
        for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < N; j++)
            {
                cout << setw(5) << a[i][j] ;
            }
            cout << endl;
        }
    }
    
    int count1 = 1;
    int count2 = 1;
    
    void fun(int a[][N],int b,int c)
    {
        if (count1 == N*N )
        {
            print();
            cout << "方案:" << count2++ << endl;
            cout << endl;
            system("pause");
        }
        else
        {
            for (int i = 0; i < 8; i++)
            {
                if (judge(a, b, c, i))
                {
                    switch (i)
                    {
                    case 0:
                        count1++;
                        a[b - 2][c - 1] = count1;
                        fun(a, b - 2, c - 1);
                        a[b - 2][c - 1] = 0;
                        count1--;
                        break;
    
                    case 1:
                        count1++;
                        a[b - 1][c - 2] = count1;
                        fun(a, b - 1, c - 2);
                        a[b - 1][c - 2] = 0;
                        count1--;
                        break;
    
                    case 2:
                        count1++;
                        a[b - 2][c + 1] = count1;
                        fun(a, b - 2, c + 1);
                        a[b - 2][c + 1] = 0;
                        count1--;
                        break;
    
                    case 3:
                        count1++;
                        a[b - 1][c + 2] = count1;
                        fun(a, b - 1, c + 2);
                        a[b - 1][c + 2] = 0;
                        count1--;
                        break;
    
                    case 4:
                        count1++;
                        a[b + 2][c - 1] = count1;
                        fun(a, b + 2, c - 1);
                        a[b + 2][c - 1] = 0;
                        count1--;
                        break;
    
                    case 5:
                        count1++;
                        a[b + 1][c - 2] = count1;
                        fun(a, b + 1, c - 2);
                        a[b + 1][c - 2] = 0;
                        count1--;
                        break;
    
                    case 6:
                        count1++;
                        a[b + 2][c + 1] = count1;
                        fun(a, b + 2, c + 1);
                        a[b + 2][c + 1] = 0;
                        count1--;
                        break;
    
                    case 7:
                        count1++;
                        a[b + 1][c + 2] = count1;
                        fun(a, b + 1, c + 2);
                        a[b + 1][c + 2] = 0;
                        count1--;
                        break;
                    }
                }
            }
        }
    
    }
    
    void main()
    {
        a[2][0] = 1;
        fun(a, 2, 0);
    
        system("pause");
    }
  • 相关阅读:
    druid连接池的配置和应用
    Maven的Unknow错误
    实践——WebStorm安装(2021/01/30)(更新2021/07/14,添加激活码和习惯设置)
    vue3如何编写挂载DOM的插件
    npm 安装源
    一个node项目的docker镜像制作
    圣女
    基于计算机视觉的车牌识别系统(一)
    vue3 兄弟组件传参mitt
    laravel-admin 加载样式失败
  • 原文地址:https://www.cnblogs.com/xiaochi/p/5035631.html
Copyright © 2011-2022 走看看