江隽铭
(波音747早期起落架广告)
1
Wrong Answer
0 分
#include<bits/stdc++.h>
using namespace std;
bool vis[505][505];
int n,m,t;
int sx,sy;
int ex,ey;
int dx[8]={-1,-2,-2,-1,1,2,2,1};
int dy[8]={-2,-1,1,2,2,1,-1,-2};
struct node{
int x,y,step;
};
int bfs(){
queue<node> q;
q.push(node{sx,sy,0});//1.队首元素入队
while(!q.empty()){//2.遍历队列,直到队列为空
node f=q.front();//2.1 找到队首元素
q.pop();//2.2存下队首元素后,队首元素出队
for(int i=0;i<8;i++){//2.3遍历队首元素能到达的所有节点
int nx=f.x+dx[i];
int ny=f.y+dy[i];
if(nx==ex&&ny==ey) return f.step+1;//2.4如果当前节点是答案,return结果
if(nx>=0&&nx<n&&ny>=0&&ny<n&&!vis[nx][ny]){//2.5判断合法合法性
//2.6入队
vis[nx][ny]=1;//2.6.1 标记
q.push(node{nx,ny,f.step+1});//2.6.2 入队
}
}
}
return -1;//3 无答案
}
int main(){
cin>>t;
while(t--){
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
}
cin>>sx>>sy>>ex>>ey;
}
cout<<bfs();
return 0;
}
姜一墨
(Time Limit Exceeded)
3
给你个伪代码
#include <bits/stdc++.h>
using namespace std;
int n,m,sx,sy,ex,ey;
int xx[]={1,-1,0,0};
int yy[]={0,0,-1,1};
char a[205][205];
int vis[505][505];
struct node{
int x,y,step;
};
int bfs()//用广搜
{
queue<node> q;
memset(vis,0,sizeof(vis));
q.push(node{sx,sy,0});
while(!q.empty())
{
node f=q.front();
q.pop();
for(int i=0;i<4;i++)
{
int nx=f.x+xx[i];
int ny=f.y+yy[i];
if(nx==ex&&ny==ey) return f.step+1;
if(判断合法性)
{
vis[nx][ny]=1;
q.push(node{nx,ny,f.step+1});
}
}
}
return -1;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n>>m;
for(用i从1开始<=n)
for(用j从1开始<=m)
{
cin>>a[i][j];
if(a[i][j]=='S')
{
sx=i;
sy=j;
}
if(a[i][j]=='E')
{
ex=i;
ey=j;
}
}
int 用变量存bfs;
if(b==-1) cout<<"oop!\n";
else cout<<b<<endl;
}
return 0;
}
姜一墨
(Time Limit Exceeded)
5
#include <iostream>
#include <queue>
#include <vector>
#include <cstring>
using namespace std;
int dx[4] = {-1,0,1,0};
int dy[4] = {0,1,0,-1};
char map[205][205];
bool visited[205][205];
int n, m;
int bfs(int sx,int sy,int ex,int ey)
{
queue<pair<int,int>> q;
q.push({sx, sy});
visited[sx][sy]=true;
int steps=0;
while (!q.empty())
{
int size = q.size();
for (int i = 0; i < size; ++i)
{
int x = q.front().first;
int y = q.front().second;
q.pop();
if (x == ex && y == ey)
return steps;
for (int j = 0; j < 4; ++j)
{
int nx = x + dx[j];
int ny = y + dy[j];
if (nx>=0&&nx<n&&ny>=0&&ny<m&&map[nx][ny] != '#' && !visited[nx][ny])
{
q.push({nx, ny});
visited[nx][ny] = true;
}
}
}
steps++;
}
return -1;
}
int main()
{
cin>>n>>m;
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
cin>>map[i][j];
int yx,yy,qx,qy,hx, hy;
for (int i=0;i<n;i++)
{
for (int j=0;j<m;j++)
{
if (map[i][j]=='Y')
{
yx=i;
yy=j;
}
else if (map[i][j] == 'Q')
{
qx=i;
qy=j;
}
else if (map[i][j] == 'H')
{
hx=i;
hy=j;
}
}
}
memset(visited, false, sizeof(visited));
int timeToQ = bfs(yx, yy, qx, qy);
if (timeToQ==-1)
{
cout << "no way" << endl;
return 0;
}
memset(visited, false, sizeof(visited));
int timeToH = bfs(qx, qy, hx, hy);
if (timeToH == -1)
cout << "no way" << endl;
else
cout << timeToQ + timeToH << endl;
return 0;
}