move between numbers

题目:

https://codeforces.com/group/d3FEQxSUNi/contest/335515/problem/I

不要忘了-1

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int n,s,e;
string a[253];
int d[253],v[253];
queue<int> q;
int jud(int te,int i)
{
    int wte[10]={0},wi[10]={0};
    for(int j=0;j<20;j++)
    {
        wte[a[te][j]-'0']++;
        wi[a[i][j]-'0']++;
    }
    int res=0;
    for(int j=0;j<10;j++)
    {
        res+=min(wte[j],wi[j]);
    }
    return res==17;
}
void bfs(int s)
{ while(!q.empty())
   q.pop();
    d[s]=0;
    v[s]=1;
    q.push(s);
    while(!q.empty())
    {
        int te=q.front();
        q.pop();
        for(int i=1;i<=n;i++)
        {
            if(!v[i]&&jud(te,i))
            {
                v[i]=1;
                d[i]=d[te]+1;
                q.push(i);

                if(i==e)
                    return;
            }
        }
    }
    if(v[e])
        return;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
     { memset(v,0,sizeof(v));
         cin>>n>>s>>e;
         getchar();
         for(int i=1;i<=n;i++)
            cin>>a[i];
        bfs(s);
        if(v[e]==0)
            printf("-1\n");
        else
        printf("%d\n",d[e]);

     }
}

 

上一篇:Javascript 利用 switch 语句进行范围判断


下一篇:CodeForces 954D-Fight Against Traffic(加边最短路)