满江红?!
查看原帖
满江红?!
1127157
LanQiao1234楼主2023/10/5 22:54

我在vscode测试了,好像没有问题,为什么上了洛谷一片满江红

#include<iostream>
#include<array>
//能走到终点的道路数量
int ans=1;
//判断是否已经在map_wall_counc()中生成完所有的墙
bool flag=false;
//终点的位置
std::pair<int,int> fin_node;
//马的位置
std::pair<int,int> knight_node;
//地图
std::array<std::array<int,24>,24> map{{}};
std::array<std::pair<int,int>,9> knight_move={{
    {0,0},
    {-1,2},
    {1,2},
    {2,1},
    {2,-1},
    {1,-2},
    {-1,-2},
    {-2,1},
    {-2,-1}
    }
};
//初始化,用于生成地图,经测试并无问题
void init(){
    for (int i = 2; i <= fin_node.second+2; i++)
        for (int j = 2; j <= fin_node.first+2 ; j++)
            map[i][j]=1;
    for (auto i : knight_move)
        map[knight_node.first+i.first+2][knight_node.second+i.second+2]=0;
    map[2][2]=-1;
    map[fin_node.first+2][fin_node.second+2]=-2;
}
//这个函数用于将所有死路以及卒走不到的点记为墙
void map_wall_counc(){
    flag=true;
    for (int i = 2; i <= fin_node.second+2; i++){
        for (int j = 2; j <= fin_node.first+2 ; j++){
            if((map[i][j]==0)||(map[i][j]==-1)||(map[i][j]==-2))
                continue;
            if((map[i-1][j]==0&&map[i][j-1]==0)||(map[i+1][j]==0&&map[i][j+1]==0)){
                map[i][j]=0;
                flag=false;
            }
        }
    }
}
int main(){
    std::cin>>fin_node.first>>fin_node.second>>knight_node.first>>knight_node.second;
    init();
    while(!flag)
        map_wall_counc();
    //判定兵是否被堵死
    if(map[2][3]==0&&map[3][2]==0){
        std::cout<<0;
        return 0;
    }
    //数出所有分叉路口的数量
    for (int i = 2; i <= fin_node.second+2; i++)
        for (int j = 2; j <= fin_node.first+2 ; j++)
            ans+=(!map[i][j]==0&&(map[i+1][j]==1&&map[i][j+1]==1));
    std::cout<<ans;
}
2023/10/5 22:54
加载中...