求大佬看一下代码,直接模拟的样例没过T^T
查看原帖
求大佬看一下代码,直接模拟的样例没过T^T
462028
Mr_ZZzz楼主2021/7/16 11:37
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
using namespace std;

int main()
{
    char map[12][12];
    int i, j;
    for (j = 0; j <= 11; ++j)//围墙
    {
        map[0][j] = '*';
        map[11][j] = '*';
        map[j][0] = '*';
        map[j][11] = '*';
    }
    int fx, fy, cx, cy;
    for (i = 1; i <= 10; ++i)//输入地图
    {
        for (j = 1; j <= 10; ++j)
        {
            cin >> map[i][j];
            if (map[i][j] == 'F')
            {
                fx = i;
                fy = j;
                map[i][j] = '.';//记录初始位置
            }
            else if (map[i][j] == 'C')
            {
                cx = i;
                cy = j;
                map[i][j] = '.';//记录初始位置
            }
        }
    }

    int cd = 0, fd = 0;//方向
    //0 - North, 1 - East, 2 - South, 3 - West

    bool state[11][11][4][11][11][4] = { false };
    //fx,fy,fd,cx,cy,cd
    state[fx][fy][fd][cx][cy][cd] = true;
    int cnt = 0;

    while (1)
    {
        switch (cd)
        {
        case 0://North
            if (map[cx][cy - 1] == '*')
            {
                cd = 1;//to East
            }
            else
                cy--;
            break;
        case 1://East
            if (map[cx + 1][cy] == '*')
            {
                cd = 2;//to South
            }
            else
                cx++;
            break;
        case 2://South
            if (map[cx][cy + 1] == '*')
            {
                cd = 3;//to West
            }
            else
                cy++;
            break;
        case 3://West
            if (map[cx - 1][cy] == '*')
            {
                cd = 0;//to North
            }
            else
                cx--;
            break;
        }
        switch (fd)
        {
        case 0://North
            if (map[fx][fy - 1] == '*')
            {
                fd = 1;//to East
            }
            else
                fy--;
            break;
        case 1://East
            if (map[fx + 1][fy] == '*')
            {
                fd = 2;//to South
            }
            else
                fx++;
            break;
        case 2://South
            if (map[fx][fy + 1] == '*')
            {
                fd = 3;//to West
            }
            else
                fy++;
            break;
        case 3://West
            if (map[fx - 1][fy] == '*')
            {
                fd = 0;//to North
            }
            else
                fx--;
            break;
        }

        cnt++;//加一分钟

        /*cout << "cnt: " << cnt << endl;*/
        //测试用
        
        if (state[fx][fy][fd][cx][cy][cd])//如果出现过这种状态则说明无解
        {
            cout << "While(1)" << endl;
            cout << 0;
            break;
        }
        else//这个状态未出现,记录状态后,判断是否相遇
        {
            state[fx][fy][fd][cx][cy][cd] = true;
            if (fx == cx && fy == cy)
            {
                cout << cnt;
                break;
            }
        }
    }

    return 0;
}

感谢你看完我的代码QAQ

实在想不明白哪里出问题了

2021/7/16 11:37
加载中...