##请大肾教教我如何从40分达到100分 教我者我都关注!!!?
查看原帖
##请大肾教教我如何从40分达到100分 教我者我都关注!!!?
858226
tylerlong楼主2024/4/18 19:47

#请大肾教教我如何从40分达到100分 #教我者我都关注!!!?

#include<bits/stdc++.h>
using namespace std;
int n,dxa[4]={-1,0,0,1},dya[4]={0,-1,1,0},dxb[4]={-2,0,0,2},dyb[4]={0,-2,2,0},dxc[4]={1,1,-1,-1},dyc[4]={-1,-1,-1,1},f=1205;
char mmap[1205][1205];
bool flag[1205][1205];
void dfs(int x,int y,int sum){
   if(x==n&&y==n){
       f=min(f,sum);
       return;
   }
   if(mmap[x][y]=='A'){
       for(int i=0;i<4;i++){
           int tmpx=x+dxa[i];
           int tmpy=y+dya[i];
           if(mmap[tmpx][tmpy]=='*'||flag[tmpx][tmpy]==1)continue;
           flag[tmpx][tmpy]=1;
           dfs(tmpx,tmpy,sum+1);
           flag[tmpx][tmpy]=0;
       }
   }
   else if(mmap[x][y]=='B'){
       for(int i=0;i<4;i++){
           int tmpx=x+dxb[i];
           int tmpy=y+dyb[i];
           if(mmap[tmpx][tmpy]=='*'||flag[tmpx][tmpy]==1)continue;
           flag[tmpx][tmpy]=1;
           dfs(tmpx,tmpy,sum+1);
           flag[tmpx][tmpy]=0;
       }
   }
   else if(mmap[x][y]=='C'){
       for(int i=0;i<4;i++){
           int tmpx=x+dxc[i];
           int tmpy=y+dyc[i];
           if(mmap[tmpx][tmpy]=='*'||flag[tmpx][tmpy]==1)continue;
           flag[tmpx][tmpy]=1;
           dfs(tmpx,tmpy,sum+2);
           flag[tmpx][tmpy]=0;
       }
   }
   return;
}
int main(){
   cin>>n;
   for(int i=1;i<=n;i++){
       for(int j=1;j<=n;j++){
           cin>>mmap[i][j];
       }
   }
   dfs(1,1,0);
   if(f==1205)cout<<"No answer"<<endl;
   else cout<<f<<endl;
   return 0;
}
2024/4/18 19:47
加载中...