标签:数组 位置 失败 for scanf ios ges 入队 分享
没啥说的,非常经典的广度优先搜索
至于为啥坐了一晚上没对,原因太尴尬
努力改正这样的毛病吧
这个东西,不细心真的不行
#include<iostream>
#include<stdio.h>
#include<queue>
#include<cstring>
using namespace std;
struct node
{
int x;
int y;
int step;
int time;
};
queue<node>Q;
int f[4][2]={0,-1,0,1,-1,0,1,0};
int a[505][505];
int m,n;
int bfs(int x,int y)
{
node q={x,y,0,6};
a[q.x][q.y]=0;
Q.push(q);
while(!Q.empty())
{
node e,w;
e=Q.front();
Q.pop();
for(int i=0;i<4;i++)
{
w.x=e.x+f[i][0];
w.y=e.y+f[i][1];
w.time=e.time-1;
w.step=e.step+1;
if(w.x>=0&&w.y>=0&&w.x<m&&w.y<n&&a[w.x][w.y]!=0&&w.time>0)
{
if(a[w.x][w.y]==3)
{
return w.step;
}
if(a[w.x][w.y]==4)
{
w.time=6;
}
Q.push(w);
a[w.x][w.y]=0;
}
}
}
return -1;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]==2)
printf("%d\n",bfs(i,j));
}
}
while(!Q.empty())
Q.pop();
memset(a,0,sizeof(a));
/*这个while和这个memset有必要说一下
每次处理完一组数据之后都要把使用的东西初始化
包括队列清空,数组归零,申请的空间要释放等等
要养成良好的习惯*/
}
return 0;
}
标签:数组 位置 失败 for scanf ios ges 入队 分享
原文地址:http://www.cnblogs.com/tianxxl/p/6500733.html