今天还是上午做的hdu的搜索题,下午参加练习赛,就AC了一道题,而且搞得我晚上很浮躁,一道作业题也没能做出来,郁闷Q.Q,就把贴上今上午做的作业题吧:
eg1.hdu2717Catch That Cow(bfs)
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int step[100001];//记录每一位置所走的步数
bool vis[100001];//0代表没走过,1代表走过
int bfs(int,int);
queue<int>q;
int main()
{int n,k;
while(cin>>n>>k)
{
memset(step,0,sizeof(step));
memset(vis,0,sizeof(vis));
while(!q.empty()) q.pop();//用队列之前先清空队列
//if(n>=k) cout<<n-k<<endl;
cout<<bfs(n,k)<<endl;
}
return 0;
}
int bfs(int n,int k)
{
int head,tail;
q.push(n);//初始位置在n位置,n入队
step[n]=0;
vis[n]=1;//标记已被访问
while(!q.empty())//当队列非空
{ head=q.front();//取队首
q.pop();//删除队首元素
for(int i=0;i<3;i++)//三种走法
{
if(i==0) tail=head-1;
if(i==1) tail=head+1;
if(i==2) tail=2*head;
if(tail<0||tail>=100001) continue;//排除出界情况
if(!vis[tail])//如果tail位置未被访问
{
q.push(tail);//tail位置入队
step[tail]=step[head]+1;//步数加一
vis[tail]=1;//tail位置被标记为已访问
}
if(tail==k) return step[tail];//当遍历到结果,返回步数
}
}
}
eg2.hduDungeon Master(bfs)
#include <iostream>//BFS
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
int a,b,c,sx,sy,sz,ex,ey,ez,vis[35][35][35];
int ax[6]= {0,0,0,0,1,-1},ay[6]= {0,0,1,-1,0,0},az[6]= {1,-1,0,0,0,0};
char ma[35][35][35];
struct point
{
int x,y,z,step;
};
int judge(int x,int y,int z)
{
if(x>=0&&y>=0&&z>=0&&x<a&&y<b&&z<c&&vis[x][y][z]==0&&ma[x][y][z]!='#')
return 1;
return 0;
}
void bfs()
{
point star;
point nex;
memset(vis,0,sizeof(vis));
queue<point> Q;
vis[sx][sy][sz]=1;
star.x=sx;
star.y=sy;
star.z=sz;
star.step=0;
Q.push(star);
while(!Q.empty())
{
star=Q.front();
Q.pop();
if(star.x==ex&&star.y==ey&&star.z==ez)
{
printf("Escaped in %d minute(s).\n",star.step);
return;
}
for(int i=0; i<6; i++)
{
nex.x=star.x+ax[i];
nex.y=star.y+ay[i];
nex.z=star.z+az[i];
if(judge(nex.x,nex.y,nex.z))
{
vis[nex.x][nex.y][nex.z]=1;
nex.step=star.step+1;
Q.push(nex);
}
}
}
printf("Trapped!\n");
return;
}
int main()
{
while(cin>>a>>b>>c,a+b+c)
{
//getchar();
for(int i=0; i<a; i++)
for(int j=0; j<b; j++)
for(int k=0; k<c; k++)
{cin>>ma[i][j][k];
if(ma[i][j][k]=='S')
{
sx=i;
sy=j;
sz=k;
}
if(ma[i][j][k]=='E')
{
ex=i;
ey=j;
ez=k;
}
}
bfs();}
return 0;
}
明天加油!!!