动物一笔画完

写在前面,这个是我最近帮我学弟做的一个作业,2020年6月份左右。在这个时间段不要直接复制提交呀,这样你们都会被认为作弊的。
随便找个c++的环境就可以跑这个程序。如果帮助到你,可以打赏杯咖啡吗。

#include <iostream>
#include <string>
using namespace std;
#define row 10
#define col 10
int matrix[row][col];
bool vis[row][col];
int r, c;
int countOne = 0;
string res;
int startRow, startCol;
int dR[4] = {0, 1, -1, 0};
int dC[4] = {1, 0, 0, -1};
bool getRes = false;
void input()
{
    res.clear();
    countOne = 0;
    cout<<"输入图形的行数和列数"<<endl;
    cin >> r >> c;
    cout<<"输入图形(可以走标记为1,不可走为0,起始点为1)"<<endl;
    for (int i = 0; i < r; i++)
    {
        for (int j = 0; j < c; j++)
        {
            cin >> matrix[i][j];
            if (matrix[i][j] == 1)
            {
                countOne = countOne + 1;
            }
            vis[i][j] = false;
        }
    }
    cout<<"输入起始点座标(下标形式)"<<endl;
    cin >> startRow >> startCol;
}
void dfsAndTraceBack(int rIndex, int cIndex)
{
    for (int i = 0; i < 4; i++)
    {
        if ((res.size() + 1) == countOne)
        {
            getRes = true;
            return;
        }
        int tmpR = rIndex + dR[i];
        int tmpC = cIndex + dC[i];
        if (!(0 <= tmpR && tmpR < r))
        {
            continue;
        }
        if (!(0 <= tmpC && tmpC < c))
        {
            continue;
        }
        if (matrix[tmpR][tmpC] == 1 && vis[tmpR][tmpC] == false && !getRes)
        {
            switch (i)
            {
            case 0:
                res = res + "R";
                break;
            case 1:
                res = res + "D";
                break;
            case 2:
                res = res + "U";
                break;
            case 3:
                res = res + "L";
                break;
            default:
                break;
            }
            vis[tmpR][tmpC] = true;
            dfsAndTraceBack(tmpR, tmpC);
            if(!getRes)
            {
                vis[tmpR][tmpC] = false;
                res.pop_back();
            }
        }
    }
}
void solve()
{
    vis[startRow][startCol] = true;
    dfsAndTraceBack(startRow, startCol);
}
int main()
{
    input();
    solve();
    cout << res << endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章