我在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;
}