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");
    }
  • 相关阅读:
    在实体属性上通过注解格式化日期
    @Validated和@Valid区别:Spring validation验证框架对入参实体进行嵌套验证必须在相应属性(字段)加上@Valid而不是@Validated
    两种根据关键字查询的方法SQL
    excel批量导入数据
    下载excel模板
    上传人员照片
    身份证校验类
    把字符串参数分割成数组 传入SQL foreach遍历查询
    使用Hibernate-Validator优雅的校验参数
    如何使用Graphics2D在一张图片上画线(包括箭头)
  • 原文地址:https://www.cnblogs.com/xiaochi/p/5035631.html
Copyright © 2011-2022 走看看