#include <bits/stdc++.h>
using namespace std;
void BFS(int a,int b);
queue<pair<int,int> >Q;
int adj[1001][1001];
int check[1001][1001];
int cost[1001][1001];
int dr[]= {-1,+0,+1,+0};
int dc[]= {+0,-1,+0,+1};
int start_x,start_y,end_x,end_y;
int row,col;
int main()
{
while(scanf("%d %d",&row,&col)==2)
{
if(row==0&&col==0) break;
memset(adj,0,sizeof(adj));
memset(check,0,sizeof(check));
memset(cost,0,sizeof(cost));
int edge;
scanf("%d",&edge);
for(int i=0; i<edge; i++)
{
int r,bomb;
scanf("%d %d",&r,&bomb);
while(bomb--)
{
int c;
scanf("%d",&c);
adj[r][c]=1;
}
}
scanf("%d %d %d %d",&start_x,&start_y,&end_x,&end_y);
BFS(start_x,start_y);
cout<<cost[end_x][end_y]<<endl;
}
return 0;
}
void BFS(int x,int y)
{
check[x][y]=1;
cost[x][y]=0;
Q.push(make_pair(x,y));
while(!Q.empty())
{
pair<int,int> top=Q.front();
Q.pop();
for(int i=0; i<4; i++)
{
int tx=top.first+dr[i];
int ty=top.second+dc[i];
if(((tx>=0&&tx<row)&&(ty>=0&ty<col))&&adj[tx][ty]==0)
{
if(check[tx][ty]==0)
{
check[tx][ty]=1;
adj[tx][ty]=1;
cost[tx][ty]=cost[top.first][top.second]+1;
// cout<<tx<<ty<<endl;
Q.push(make_pair(tx,ty));
}
}
}
}
}
using namespace std;
void BFS(int a,int b);
queue<pair<int,int> >Q;
int adj[1001][1001];
int check[1001][1001];
int cost[1001][1001];
int dr[]= {-1,+0,+1,+0};
int dc[]= {+0,-1,+0,+1};
int start_x,start_y,end_x,end_y;
int row,col;
int main()
{
while(scanf("%d %d",&row,&col)==2)
{
if(row==0&&col==0) break;
memset(adj,0,sizeof(adj));
memset(check,0,sizeof(check));
memset(cost,0,sizeof(cost));
int edge;
scanf("%d",&edge);
for(int i=0; i<edge; i++)
{
int r,bomb;
scanf("%d %d",&r,&bomb);
while(bomb--)
{
int c;
scanf("%d",&c);
adj[r][c]=1;
}
}
scanf("%d %d %d %d",&start_x,&start_y,&end_x,&end_y);
BFS(start_x,start_y);
cout<<cost[end_x][end_y]<<endl;
}
return 0;
}
void BFS(int x,int y)
{
check[x][y]=1;
cost[x][y]=0;
Q.push(make_pair(x,y));
while(!Q.empty())
{
pair<int,int> top=Q.front();
Q.pop();
for(int i=0; i<4; i++)
{
int tx=top.first+dr[i];
int ty=top.second+dc[i];
if(((tx>=0&&tx<row)&&(ty>=0&ty<col))&&adj[tx][ty]==0)
{
if(check[tx][ty]==0)
{
check[tx][ty]=1;
adj[tx][ty]=1;
cost[tx][ty]=cost[top.first][top.second]+1;
// cout<<tx<<ty<<endl;
Q.push(make_pair(tx,ty));
}
}
}
}
}
কোন মন্তব্য নেই:
একটি মন্তব্য পোস্ট করুন