> 文档中心 > C++ 遭遇战

C++ 遭遇战

【问题描述】
小林和小华在一个 n×n的矩形方格里玩游戏,矩形左上角为(0,0),右下角为(n−1,n−1)。

两人同时进入地图的随机位置,并以相同速度进行走位。为了隐蔽性,两人都不会再走自己走过的格子。如果两人向某一方向前进,那么他们会跑到不能跑为止,当不能跑的时候,小林会向右转,小华则会向左转,如果不能跑,则不再动。现在已知两人进入地图的初始位置和方向,请算出两人遭遇的位置。

【输入格式】
第 1 行 1 个正整数 t,表示测试数据组数,1≤t≤10。

接下来的 t 组数据,每组数据的第1行包含 1 个整数n,1≤n≤1000。

第 2 行包含 3 个整数x、y和d,表示小林的初始位置和一开始跑的方向。其中,d=0 表示东; d=1 表示南;d=2 表示西;d=3 表示北。

第 3 行与第 2 行格式相同,但描述的是小华。

【输出格式】
输出 t 行,若会遭遇,则包含两个整数,表示他们第一次相遇格子的坐标,否则输出“-1”。

【输入样例】

220 0 00 1 240 1 03 2 0

【输出样例】

-11 3

code

#include#define maxn 1005using namespace std;int v1[maxn][maxn],v2[maxn][maxn];int d[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//东 南  西  北  每个方向做的事情 提前准备好 int main(){int t,n,xl,yl,dl,xh,yh,dh,u,v,fl=0,fh=0,i;cin>>t;while (t--) {//多组数据  每组开始前,一切归零 cin>>n;cin>>xl>>yl>>dl;cin>>xh>>yh>>dh;if(xl==xh && yl==yh){cout<<xh<<" "<<yh<<endl;continue;} memset(v1,0,sizeof(v1));//数组清零 memset(v2,0,sizeof(v2));fl=0;fh=0;v1[xl][yl]=1;v2[xh][yh]=1; while(1){if(fl==0){for(i=1;i<=4;i++){u=xl+d[dl][0];v=yl+d[dl][1];if(u>=0 && u<=n-1 && v>=0 && v<=n-1 && v1[u][v]==0)//不越界 点没走过 {xl=u; yl=v;v1[u][v]=1;break;}else//越界 走过  不能走 dl=(dl+1)%4;}if(i>4) fl=1;}  if(fh==0){for(i=1;i<=4;i++){u=xh+d[dh][0];v=yh+d[dh][1];if(u>=0 && u<=n-1 && v>=0 && v<=n-1 && v2[u][v]==0)//不越界 点没走过 {xh=u; yh=v;v2[u][v]=1;break;}else//越界 走过  不能走 {dh=(dh-1);  if(dh<0)dh=3;}}if(i>4) fh=1;} if(xl==xh && yl==yh){  cout<<xh<<" "<<yh<<endl;  break;}else{if(fl==1 && fh==1){cout<<-1<<endl;break;}  }  }}return 0;}

code (2)

#include using namespace std;int main(){int t;cin>>t; //组数 int n[t];int x1[t],y1[t],d1[t];int x2[t],y2[t],d2[t];bool move1[t]; bool move2[t]; for(int i=0;i<t;i++){    cin>>n[i];cin>>y1[i]>>x1[i]>>d1[i];cin>>y2[i]>>x2[i]>>d2[i];move1[i]=1;move2[i]=1;}for(int i=0;i<t;i++){bool a1[n[i]][n[i]];bool a2[n[i]][n[i]];for(int k=0;k<n[i];k++)for(int g=0;g<n[i];g++){a1[k][g]=0;a2[k][g]=0;}a1[y1[i]][x1[i]]=1;a2[y2[i]][x2[i]]=1;while(1){    if(x1[i]==x2[i] && y2[i]==y1[i]){cout<<y1[i]<<" "<<x1[i]<<endl;break;}if(move1[i]==false && move2[i]==false){   cout<<"-1"<<endl;   break;}if(d1[i]==0){    if(x1[i]==n[i]-1 && y1[i]==n[i]-1)move1[i]=0;    if(x1[i]==n[i]-1 && a1[y1[i]+1][x1[i]]==1)move1[i]=0;    if(y1[i]==n[i]-1 && a1[y1[i]][x1[i]+1]==1)move1[i]=0;    if(a1[y1[i]][x1[i]+1]==1 && a1[y1[i]+1][x1[i]]==1)move1[i]=0;     if(move1[i]) { if(x1[i]<n[i]-1 && a1[y1[i]][x1[i]+1]!=1)  x1[i]++;else if(a1[y1[i]+1][x1[i]]!=1 ){  y1[i]++;  d1[i] = 1;}a1[y1[i]][x1[i]]=1;    }}else if(d1[i]==1){    if(x1[i]==0 && y1[i]==n[i]-1)move1[i]=0;    if(y1[i]==n[i]-1 && a1[y1[i]][x1[i]-1]==1)move1[i]=0;    if(x1[i]==0 && a1[y1[i]+1][x1[i]]==1)move1[i]=0;    if(a1[y1[i]][x1[i]-1]==1 && a1[y1[i]+1][x1[i]]==1)move1[i]=0;    if(move1[i]) { if(y1[i]<n[i]-1 && a1[y1[i]+1][x1[i]]!=1)  y1[i]++;else if(a1[y1[i]][x1[i]-1]!=1 ){  x1[i]--;  d1[i] = 2;}a1[y1[i]][x1[i]]=1;    }}else if(d1[i]==2){    if(x1[i]==0 && y1[i]==0)move1[i]=0;    if(x1[i]==0 && a1[y1[i]-1][x1[i]]==1)move1[i]=0;    if(y1[i]==0 && a1[y1[i]][x1[i]-1]==1)move1[i]=0;    if(a1[y1[i]][x1[i]-1]==1 && a1[y1[i]-1][x1[i]]==1)move1[i]=0;    if(move1[i]) { if(x1[i]>0 && a1[y1[i]][x1[i]-1]!=1)  x1[i]--;else if(a1[y1[i]-1][x1[i]]!=1 ){  y1[i]--;  d1[i] = 3;}a1[y1[i]][x1[i]]=1;    }}else if(d1[i]==3){    if(x1[i]==n[i]-1 && y1[i]==0)move1[i]=0;    if(x1[i]==n[i]-1 && a1[y1[i]-1][x1[i]]==1)move1[i]=0;    if(y1[i]==0 && a1[y1[i]][x1[i]+1]==1)move1[i]=0;    if(a1[y1[i]][x1[i]+1]==1 && a1[y1[i]-1][x1[i]]==1)move1[i]=0;    if(move1[i]) { if(y1[i]>0 && a1[y1[i]-1][x1[i]]!=1)  y1[i]--;else if(a1[y1[i]][x1[i]+1]!=1 ){  x1[i]++;  d1[i] = 0;}a1[y1[i]][x1[i]]=1;    }}//if(d2[i]==0){    if(x2[i]==n[i]-1 && y2[i]==0)move2[i]=0;    if(x2[i]==n[i]-1 && a2[y2[i]-1][x2[i]]==1)move2[i]=0;    if(y2[i]==0 && a2[y2[i]][x2[i]+1]==1)move2[i]=0;    if(a2[y2[i]][x2[i]+1]==1 && a2[y2[i]-1][x2[i]]==1)move2[i]=0;    if(move2[i]) { if(x2[i]<n[i]-1 && a2[y2[i]][x2[i]+1]!=1)  x2[i]++;else if(a2[y2[i]-1][x2[i]]!=1 ){  y2[i]--;  d2[i] = 3;}a2[y2[i]][x2[i]]=1;    }}else if(d2[i]==1){    if(x2[i]==n[i]-1 && y2[i]==n[i]-1)move2[i]=0;    if(x2[i]==n[i]-1 && a2[y2[i+1]][x2[i]]==1)move2[i]=0;    if(y2[i]==n[i]-1 && a2[y2[i]][x2[i]+1]==1)move2[i]=0;    if(a2[y2[i]][x2[i]+1]==1 && a2[y2[i]+1][x2[i]]==1)move2[i]=0;    if(move2[i]) { if(y2[i]<n[i]-1 && a2[y2[i]+1][x2[i]]!=1)  y2[i]++;else if(a2[y2[i]][x2[i]+1]!=1 ){  x2[i]++;  d2[i] = 0;}a2[y2[i]][x2[i]]=1;    }}else if(d2[i]==2){    if(x2[i]==0 && y2[i]==n[i]-1)move2[i]=0;    if(y2[i]==n[i]-1 && a2[y2[i]][x2[i]-1]==1)move2[i]=0;    if(x2[i]==0 && a2[y2[i]+1][x2[i]]==1)move2[i]=0;    if(a2[y2[i]][x2[i]-1]==1 && a2[y2[i]+1][x2[i]]==1)move2[i]=0;    if(move2[i]) { if(x2[i]>0 && a2[y2[i]][x2[i]-1]!=1)  x2[i]--;else if(a2[y2[i]+1][x2[i]]!=1 ){  y2[i]++;  d2[i] = 1;}a2[y2[i]][x2[i]]=1;    }}else if(d2[i]==3){    if(x2[i]==0 && y2[i]==0)move2[i]=0;    if(x2[i]==0 && a2[y2[i]-1][x2[i]]==1)move2[i]=0;    if(y2[i]==0 && a2[y2[i]][x2[i]-1]==1)move2[i]=0;    if(a2[y2[i]][x2[i]-1]==1 && a2[y2[i]-1][x2[i]]==1)move2[i]=0;    if(move2[i]) { if(y2[i]>0 && a2[y2[i]-1][x2[i]]!=1)  y2[i]--;else if(a2[y2[i]][x2[i]-1]!=1 ){  x2[i]--;  d2[i] = 2;}a2[y2[i]][x2[i]]=1;    }}    }  }   return 0;}