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