201403-4 无线网络 100

http://118.190.20.162/view.page?gpid=T7

递归bfs超时版 0分

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node{
    ll x;
    ll y;
    bool add;
    bool chose;
    bool operator ==(const node bb) const {
        return ((this->x==bb.x)&&(this->y==bb.y));
    }
};
node a[220];
ll minn=(1<<30)-1;
ll n,m,k,r;
bool in(node aa,node bb){
    if( (aa.x-bb.x)*(aa.x-bb.x)+(aa.y-bb.y)*(aa.y-bb.y) <= r*r){
        return true;
    }
    else return false;
}
void bfs(node &aa,ll &minn,ll level,ll &prek){

    int next=0;//从当前可以到多少个未访问的点
    aa.chose=true;
    if(prek==k){
        for(int i=0;i<m+n;i++){
            if(a[i].add==true)
                a[i].chose=true;
        }
    }
    if(in(aa,a[1])){//如果到达终点就返回
        if(level<minn){
            minn=level;
        }
        return;
    }
    for(int i=0;i<m+n;i++){//遍历所有点,寻找可达的未访问
        if(( aa == a[i] )|| a[i].chose==true)
             continue;
        if(in(aa,a[i])){
            next++;
            if(a[i].add){
                prek++;
            }
            a[i].chose=true;
            //cout<<"level:"<<level<<" "<<a[i].x<<" "<<a[i].y<<endl;
            bfs(a[i],minn,level+1,prek);
            a[i].chose=false;
        }
    }
    aa.chose=false;
    //如果无路可选也返回
}
int main(){
    scanf("%lld%lld%lld%lld",&n,&m,&k,&r);
    for(int i=0;i<n;i++){
        scanf("%lld%lld",&a[i].x,&a[i].y);
        a[i].add=false;
        a[i].chose=false;
    }
    for(int i=0;i<m;i++){
        scanf("%lld%lld",&a[i+n].x,&a[i+n].y);
        a[i+n].add=true;
        a[i+n].chose=false;
    }
    ll prek=0;
    bfs(a[0],minn,0,prek);
    printf("%lld",minn);
    return 0;
}

栈bfs 100分

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node{
    ll x;
    ll y;
    bool add;
    bool chose;
    int prek;
    int level;
    bool operator ==(const node bb) const {
        return ((this->x==bb.x)&&(this->y==bb.y));
    }
};
node a[220];
ll minn=(1<<30)-1;
ll n,m,k,r;
bool in(node aa,node bb){
    if( (aa.x-bb.x)*(aa.x-bb.x)+(aa.y-bb.y)*(aa.y-bb.y) <= r*r){
        return true;
    }
    else return false;
}
int bfs(){
    queue<node> q;
    a[0].prek=0;
    a[0].level=0;
    a[0].chose=true;
    q.push(a[0]);
    node pre;
    while(!q.empty()){
        pre=q.front();
        q.pop();
        if(pre.x==a[1].x&&pre.y==a[1].y)
            return pre.level;
        int searchn=n+m;
        if(pre.prek==k){
            searchn=n;
        }
        for(int i=0;i<searchn;i++){
            if(a[i].chose==true)
                 continue;
            if(in(pre,a[i])){
                a[i].chose=true;
                a[i].level=pre.level+1;
                a[i].prek=pre.prek;
                if(a[i].add==true)
                    a[i].prek++;
                q.push(a[i]);
            }
        }
    }
    return 0;
}
int main(){
    scanf("%lld%lld%lld%lld",&n,&m,&k,&r);
    for(int i=0;i<n;i++){
        scanf("%lld%lld",&a[i].x,&a[i].y);
        a[i].add=false;
        a[i].chose=false;
    }
    for(int i=0;i<m;i++){
        scanf("%lld%lld",&a[i+n].x,&a[i+n].y);
        a[i+n].add=true;
        a[i+n].chose=false;
    }
    int ans=bfs();
    printf("%d",ans-1);
    return 0;
}

SPFA 100分

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node{
    ll x;
    ll y;
    bool add;
    bool chose;
    int prek;
    int seq;
    bool operator ==(const node bb) const {
        return ((this->x==bb.x)&&(this->y==bb.y));
    }
};
node a[220];
ll minn=(1<<30)-1;
ll n,m,k,r;
bool in(node aa,node bb){
    if( (aa.x-bb.x)*(aa.x-bb.x)+(aa.y-bb.y)*(aa.y-bb.y) <= r*r){
        return true;
    }
    else return false;
}
ll d[220]={(1<<30)-1};
void spfa(){
    queue <node> q;
    a[0].chose=true;
    a[0].prek=0;
    q.push(a[0]);
    d[0]=0;

    node pre;
    while (!q.empty()){
        pre=q.front();
        q.pop();
        a[pre.seq].chose=false;

        int searchn=n+m;
        if(pre.prek==k){
            searchn=n;
        }
        for(int i=0;i<searchn;i++){
            if(a[i].chose==true)
                 continue;
            if(in(pre,a[i])){
                if(d[pre.seq]+1<d[a[i].seq]){
                    d[a[i].seq]=d[pre.seq]+1;
                    if(a[i].add){
                        a[i].prek=pre.prek+1;
                    }
                    a[i].chose=true;
                    q.push(a[i]);
                }
            }
        }
    }
}
int main(){
    scanf("%lld%lld%lld%lld",&n,&m,&k,&r);
    for(int i=0;i<n;i++){
        scanf("%lld%lld",&a[i].x,&a[i].y);
        a[i].add=false;
        a[i].chose=false;
        a[i].seq=i;
    }
    for(int i=0;i<m;i++){
        scanf("%lld%lld",&a[i+n].x,&a[i+n].y);
        a[i+n].add=true;
        a[i+n].chose=false;
        a[i+n].seq=i+n;
    }
    for(int i=0;i<n+m;i++)
        d[i]=(1<<30);
    spfa();
    printf("%d",d[1]-1);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值