这个题目两中搜索都ok。不用搜索都可以- -。如果有放水点的高度大于等于司令部的高度,那么就被淹了。。
dfs:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#include<cctype>
using namespace std;
int f[4][2]={0,1,1,0,0,-1,-1,0};
int n,m,sx,sy;
int a[201][201];
int vit[201][201];
bool flag;
bool dfs(int x,int y,int temp)
{
if(x==sx&&y==sy&&temp>=a[x][y])
return true ;
for(int i=0;i<4;i++)
{
int ex=x+f[i][0],ey=y+f[i][1];
if(!vit[ex][ey]&&ex>=1&&ex<=m&&ey>=1&&ey<=n&&temp>=a[ex][ey])
{
vit[ex][ey] = 1;
if(dfs(ex,ey,temp))
return true;
}
}
return false;
}
int main()
{
int k,p,ex,ey,temp;
scanf("%d",&k);
while(k--)
{
scanf("%d%d",&m,&n);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
scanf("%d%d",&sx,&sy);
scanf("%d",&p);
flag = false ;
while(p--)
{
scanf("%d%d",&ex,&ey);
if(flag)
continue;
else
{
memset(vit,0,sizeof(vit));
temp=a[ex][ey];
if(dfs(ex,ey,temp))
flag=true;
}
}
if(flag)
printf("Yes\n");
else
printf("No\n");
}
}
另外一种写法:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#include<cctype>
using namespace std;
int n,m,sx,sy,ex,ey;
int a[201][201];
int main()
{
int k,p;
cin>>k;
while(k--)
{
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
cin>>sx>>sy;
cin>>p;
bool flag = false ;
while(p--)
{
cin>>ex>>ey;
if(a[ex][ey]>=a[sx][sy])
flag = true;
}
if(flag)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}