有几个样例没过,为什么循环写0到11就可以过,写1到12就不行
查看原帖
有几个样例没过,为什么循环写0到11就可以过,写1到12就不行
694728
isomer__1楼主2022/11/21 16:41
#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <unordered_map>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <ctime>
#include <vector>
#include <fstream>
#include <list>
#include <iomanip>
#include <numeric>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define ms(s) memset(s, 0, sizeof(s))
const int inf = 0x3f3f3f3f;
#define LOCAL
#define ft(i,n,m) for(int i=n;i<=m;i++)
#define fw(i,n,m) for(int i=n;i>=m;i--)
#define rr register int
#define mmp(x,y) make_pair(x,y)

int x1,x2,y_1,y2;
bool vis[1000][1000];
const int dx[]={0,-1,-1,1,1,-2,-2,2,2,2,-2,2,-2};
const int dy[]={0,-2,2,-2,2,-1,1,-1,1,2,-2,-2,2};

struct node
{
    int x,y;
    int step;
};
queue<node>q;
int bfs(int x,int y)
{
    node a;
    a.x=x,a.y=y;
    a.step=0;
    q.push(a);
    while(!q.empty()){
        a=q.front();
        q.pop();
        ft(i,1,12){
            node c;
            c.x=a.x+dx[i],c.y=a.y+dy[i];
            if(c.x>=1&&c.y>=1&&vis[c.x][c.y]==0){
                if(c.x==1&&c.y==1)return c.step;
                vis[c.x][c.y]=1;
                c.step=a.step+1;
                q.push(c);
            }
        }
    }
}
void solve()
{
    cin>>x1>>y_1>>x2>>y2;
    cout<<bfs(x1,y_1)<<endl;
    memset(vis,0,sizeof(vis));
    while(!q.empty())q.pop();
    cout<<bfs(x2,y2);
}



int main() 
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    solve();
    return 0;
}
2022/11/21 16:41
加载中...