远古洪荒时期,女王Alice和战神Bob因爱相恋,一段催人泪下的爱情故事流传民间.
相传,女王Alice的美貌惊艳六界,作为对颜值颇有要求的上古灵兽Qaq芳心异动,可是女王早已许配给战神Bob,怎么会移情于己呢,而且单挑自己也不是战神Bob的对手。于是,灵兽Qaq便设计将战神Bob引入洪荒之地,种下十里桃花困住战神Bob。女王Alice得知后,冒着渡劫的天雷赶去营救……实在bian不下去了.
简言之,一个 n×n 的迷宫,Alice站在 (1,1) 位置,Bob被困在 (n,n) 位置,迷宫中会有障碍物,规定障碍物在迷宫中不能同行且不能同列。Alice只能在迷宫中移动且不能跨越障碍物,每次只能移动一个格子且只有上下左右四个方向。
Alice能顺利解救Bob么?若成功解救输出 Yes
,并输出最少所用步数.否则输出 No
.
如图所示,A
代表Alice,B
代表Bob,#
代表障碍物,箭头代表移动的四个方向:
输入
第一行一个整数 T,代表 T 组测试数据.
对于每一组数据,第一行两个整数 n 和 m,分别表示 n×n 迷宫大小和 m 个障碍物,接下来 m 行,每一行两个整数 x 和 y,表示障碍物坐标 (x,y)。
数据保证障碍物不同行且不同列,且不在位置 (1,1),(n,n)。
(1≤T≤2000,1≤m,n≤10000,1≤x,y≤n)
输入
第一行一个整数 T,代表 T 组测试数据.
对于每一组数据,第一行两个整数 n 和 m,分别表示 n×n 迷宫大小和 m 个障碍物,接下来 m 行,每一行两个整数 x 和 y,表示障碍物坐标 (x,y)。
数据保证障碍物不同行且不同列,且不在位置 (1,1),(n,n)。
(1≤T≤2000,1≤m,n≤10000,1≤x,y≤n)
输出
对于每组测试样例,输出占一行。
若成功解救输出 Yes
,并输出最少所用步数.否则输出 No
。
样例
Input
2 2 1 1 2 2 2 1 2 2 1
Output
Yes 2 No
#include<stdio.h>
int main()
{
int t,n,m,x[10005],y[10005];
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);//n*n
int flag=0;
for(int i=0;i<m;i++)
{
scanf("%d %d",&x[i],&y[i]);
if(i>0)
{
if(x[i]+y[i]!=x[0]+y[0])//检验是否是在同一条斜线上
flag=1;
}
}
if(flag==0&&m>1&&m==x[0]+y[0]-1)//陷阱个数必须多余1个,且个数与矩阵坐标有关系
printf("No\n");
else
printf("Yes %d\n",2*n-2);//只要能到达目的地,最少步数一定为2*n-2
}
return 0;
}