较为复杂的方格图dfs
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int>pii;
//#define int long long
#define x first
#define y second
const int N=550;
pii c[N*N];
int a[N][N];
int n,m,k;
int f;
int vis[N][N];
int st1[N][N];
int ans;
int t;
map<pii,int>st;
int dr[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
bool check(int x,int y)
{
if(x==0||x==n-1||y==0||y==n-1)
return true;
else return false;
}
bool check1(int x,int y)
{
if(x<0||x>=n||y<0||y>=n)
return false;
else return true;
}
bool dfs(int x,int y)
{
if(check(x,y)||st1[x][y])
{
for(int i=0;i<4;i++)
{
int xx=x+dr[i][0];
int yy=y+dr[i][1];
if(!check1(xx,yy))continue;
if(!st1[xx][yy])
{
st1[xx][yy]=1;
if(st[{xx,yy}])
{
t=1;
return true;
}
if(vis[xx][yy])
{
dfs(xx,yy);
}
}
}
}
return false;
}
int main()
{
// ios::sync_with_stdio(0);
//cin>>n>>m>>k;
scanf("%d%d%d",&n,&m,&k);
int fl=1;
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
if(x==0||x==n-1||y==0||y==n-1)
{
fl=0;
ans=0;
}
c[i]={x,y};
st[c[i]]=1;
}
for(int i=1;i<=k;i++)
{
int a,b;
scanf("%d%d",&a,&b);
if(fl)
{
vis[a][b]=1;
if(dfs(a,b))
{
ans=i;
fl=1;
}
}
}
cout<<ans<<endl;
return 0;
}