广度优先搜索(广搜)3(c++)
·
迷宫
题目描述
有一个仅由数字 0 与 1 组成的n*n 格迷宫。若你位于一格 0 上,那么你可以移 动到相邻 4 格中的某一格 1 上,同样若你位于一格 1 上,那么你可以移动到相 邻 4 格中的某一格 0 上。
你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自 身)。
输入格式
第 1 行为两个正整数n,m。 下面 n行,每行n个字符,字符只可能是 0 或者 1 ,字符之间没有空格。 接下来m行,每行 2 个用空格分隔的正整数i,j对应了迷宫中第 i 行第 j列的一个 格子,询问从这一格开始能移动到多少格。
输出格式
m行,对于每个询问输出相应答案。
样例
输入样例
2 2
0 1
1 0
1 1
2 2
输出样例
4
4
#include <bits/stdc++.h>
using namespace std;
struct aaa
{
int x,y,v;
aaa()
{
x = 0;
y = 0;
}
aaa(int a,int b,int c)
{
x = a;
y = b;
v = c;
}
};
aaa que[10010];
int a[110][110];
bool b[110][110];
int n,m;
int cnt;
int head;
int hi;
int tail;
int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};
void bfs(int,int);
int main()
{
cin>>n>>m;
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=n;j++)
{
cin>>a[i][j];
}
}
for(int iii = 1;iii<=m;iii++)
{
int ii,jj;
cin>>ii>>jj;
bfs(ii,jj);
cout<<cnt<<endl;
cnt = 0;
for(int i = 0;i<=100;i++)
{
for(int j = 0;j<=100;j++)
{
b[i][j] = 0;
}
}
}
return 0;
}
void bfs(int xx,int yy)
{
head = 0;
tail = 0;
que[++tail] = {xx,yy,a[xx][yy]};
while(head<tail)
{
head++;
for(int i = 0;i<4;i++)
{
int tx = que[head].x+dx[i];
int ty = que[head].y+dy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&a[tx][ty]!=que[head].v&&b[tx][ty]==0)
{
cnt++;
que[++tail] = {tx,ty,a[tx][ty]};
b[tx][ty] = 1;
}
}
}
}
鸡飞狗不跳
题目描述
有一只鸡和一条狗,他们在一条线上,鸡的位置在点N处,狗在点M处,鸡和狗约定,狗站那不动,鸡去找狗。可以一次向左或向右走一步,也可一次飞到原来所在位置的2倍处。鸡飞一次和走一步时间相同。为了不让狗等得着急,鸡最快多长时间能到狗的位置。
输入格式
输入一行N,M(0<=N,M<=100000)。
输出格式
输出鸡到狗位置的最短时间。
样例
样例输入1
5 17
样例输出1
4
#include <bits/stdc++.h>
using namespace std;
struct point
{
int x,v;
point(){};
point(int a,int b)
{
x = a;
v = b;
}
};
point que[100010];
int head = 0;
int tail = 0;
int b[100010];
int n,m;
int cnt;
int dx[] = {1,-1,2};
int main()
{
cin>>n>>m;
b[n] = 1;
que[++tail] = {n,0};
while(head<tail)
{
head++;
bool t = false;
for(int i = 0;i<3;i++)
{
int tx;
if(i==2)
{
tx = que[head].x*dx[i];
}
else
{
tx = que[head].x+dx[i];
}
if(tx>=1&&tx<=100010&&b[tx]==0)
{
b[tx] = 1;
que[++tail] = {tx,que[head].v+1};
if(tx==m)
{
t = true;
break;
}
}
}
if(t==true)
{
break;
}
}
cout<<que[tail].v;
return 0;
}
更多推荐



所有评论(0)