请求支援。。。233333,只过了两个,
查看原帖
请求支援。。。233333,只过了两个,
419652
MOXCOOT楼主2021/3/8 20:28
#include <iostream>
#include <vector>
#include<cstdio>
#include <string>
#include<iomanip>
#define NUM 15
using namespace std;
int dx[]={0,1,0,-1};                                //朝向数组
int dy[]={1,0,-1,0}; 
char map[NUM][NUM];                                 //地图数组
int cnt=0,flagf=0,flagc=0;                          //cnt:分钟数,flagf:F 的朝向,flagc:C 的朝向
int zip(int xf,int yf,int xc,int yc){
    if(xf==xc&&yf==yc)return cnt;                    //如果位置重复就返回
    cnt++;
    if(flagf==4)flagf=0;                             //这个就是相当于取模
    if(flagc==4)flagc=0;
    int nxf=xf+dx[flagf];                            //F向前走一步后的坐标
    int nyf=yf+dy[flagf];
    int nxc=xc+dx[flagc];                            //C向前走一步后的坐标
    int nyc=yc+dx[flagc];
    if(map[nxc][nyc]=='*'){                         //C如果撞墙,转弯,再向后退一步
        flagc++;
        nxc=xc;
        nyc=yc;
    }
    if(map[nxf][nyf]=='*'){                               //F如果撞墙,转弯,再向后退一步
        flagf++;
        nxf=xf;
        nyf=yf;
    }
    if(cnt>123132){                                       //如果分钟数太大
        return 0;
    }
    else{
        return zip(nxf,nyf,nxc,nyc);                 //递归
    }
}
int main(){
    for(int i=0;i<=12;i++){                          //先将整张图变成墙
        for(int j=0;j<=12;j++){
            map[i][j]='*';
        }
    }
    int xf,yf,xc,yc;       
    for(int i=1;i<=10;i++){     
        for(int j=1;j<=10;j++){                    
            cin>>map[i][j];
            if(map[i][j]=='F'){             //记录下F的初始位置
                xf=i;
                yf=j;
            }
            if(map[i][j]=='C'){               //记录下C的初始位置
                xc=i;
                yc=j;
            }
        }
    }
    cout<<zip(xf,yf,xc,yc);
}
2021/3/8 20:28
加载中...