dfs做奇怪的电梯

看看这可恶的题目

40分代码:
#include <bits/stdc++.h>
#define for(i,l,r) for(int i=l;i<=r;i++)
#define inf 0x7f
using namespace std;
int ans=inf,n,s,e,a[inf],f[inf],step;
void dfs(int now,int step){
    if(now==e)
    { ans=min(ans,step);
    }
    else if(step<=ans) {
    f[now]=1;
        if(now+a[now]<=e&&f[now+a[now]]==0){
            dfs(now+a[now],step++);
        }
        if(now-a[now]>0&&f[now-a[now]]==0){
            dfs(now-a[now],step++);
        }
    f[now]=0;
    }
    }
int main(){
ios::sync_with_stdio(0);
cin>>n>>s>>e;
for(i,1,n){
    cin>>a[i];
}
f[s]=1;
dfs(s,0);
if(ans!=inf)
cout<<ans;
else cout<<"-1";
return 0;
}
60分代码:(其他四个的时t掉的)
#include <bits/stdc++.h>
#define for(i,l,r) for(int i=l;i<=r;i++)
#define inf 0x7f7f
using namespace std;
int ans=inf,n,s,e,a[inf],f[inf],step;
void dfs(int now,int step){
    if(now==e)
    { ans=min(ans,step);
    return;
    }
    else if(step<=ans) {
        if(now+a[now]<=e){
            step++;
            f[now+a[now]]=1;
            dfs(now+a[now],step);
            step--;
            f[now+a[now]]=0;
        }
        if(now-a[now]>0){
            f[now-a[now]]=1;
            step++;
            dfs(now-a[now],step);
            step--;
            f[now-a[now]]=0;
        }
    }
    }
int main(){
ios::sync_with_stdio(0);
cin>>n>>s>>e;
for(i,1,n){
    cin>>a[i];
}
f[s]=1;
dfs(s,0);
if(ans!=inf)
cout<<ans;
else cout<<"-1";
return 0;
}
70分代码:
#include <bits/stdc++.h>
#define for(i,l,r) for(int i=l;i<=r;i++)
#define inf 0x7f
using namespace std;
int ans=inf,n,s,e,a[inf],f[inf],step;
void dfs(int now,int step){
    if(now==e)
    { ans=min(ans,step);
    return;
    }
    else if(step<=ans) {
        if(now+a[now]<=e&&f[now+a[now]]==0){
            step++;
            f[now+a[now]]=1;
            dfs(now+a[now],step);
            step--;
            f[now+a[now]]=0;
        }
        if(now-a[now]>0&&f[now-a[now]]==0){
            f[now-a[now]]=1;
            step++;
            dfs(now-a[now],step);
            step--;
            f[now-a[now]]=0;
        }
    }
    }
int main(){
ios::sync_with_stdio(0);
cin>>n>>s>>e;
for(i,1,n){
    cin>>a[i];
}
f[s]=1;
dfs(s,0);
if(ans!=inf)
cout<<ans;
else cout<<"-1";
return 0;
}
80分:
#include <bits/stdc++.h>
#define for(i,l,r) for(int i=l;i<=r;i++)
#define inf 0x7f7f7f
using namespace std;
int ans=inf,n,s,e,a[207],step;
bool f[207];
void dfs(int now,int step){
if(now==e)
    { ans=min(ans,step);
    }
if(step<=ans) {
        if(now+a[now]<=e&&f[now+a[now]]==0){
            f[now]=1;
            dfs(now+a[now],++step);
            f[now]=0;
        }
        if(now-a[now]>0&&f[now-a[now]]==0){
            f[now]=1;
            dfs(now-a[now],++step);
            f[now]=0;
        }
    }

    }
int main(){
ios::sync_with_stdio(0);
cin>>n>>s>>e;
for(i,1,n){
    cin>>a[i];
}
f[s]=1;
dfs(s,0);
if(ans!=inf)
cout<<ans;
else cout<<"-1";
return 0;
}
100分
#include <bits/stdc++.h>
#define for(i,l,r) for(int i=l;i<=r;i++)
#define inf 0x7f7f7f
using namespace std;
int ans=inf,n,s,e,a[207],step;
bool f[207];
void dfs(int now,int step){
if(now==e)
    { ans=min(ans,step);
    return;
    }
if(step<=ans) {
        if(now+a[now]<=e&&f[now+a[now]]==0){
            f[now]=1;
            dfs(now+a[now],++step);
            f[now]=0;
            step--;
        }
        if(now-a[now]>0&&f[now-a[now]]==0){
            f[now]=1;
            dfs(now-a[now],++step);
            f[now]=0;
            step--;
        }
    }

    }
int main(){
ios::sync_with_stdio(0);
cin>>n>>s>>e;
for(i,1,n){
    cin>>a[i];
}
f[s]=1;
dfs(s,0);
if(ans!=inf)
cout<<ans;
else cout<<"-1";
return 0;
}

  是不是惊人的相似,其实就是回溯的正确与否,不要太相信题解,,不要太相信题解,不要太相信题解,不要太相信题解@@@@@

原文地址:https://www.cnblogs.com/sc-pyt-2021-theworld/p/10344437.html

时间: 2024-10-29 21:47:56

dfs做奇怪的电梯的相关文章

【DFS】奇怪的电梯

奇怪的电梯 题目描述 有一天桐桐做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1≤i≤N)上有一个数字K:(0≤Ki≤N).电梯只有四 个按钮:开,关,上,下.上下的层数等于当前楼层上的那个数字.当然,如果不能满足要求,相应的按钮就会失灵.例如:3 3 1 2 5代表了Ki (K1=3,K2=3,…),从一楼开始.在一楼,按“上,”可以到4楼,按“下”是不起作用的,因为没有-2楼.那么,从A楼到B楼至少要按几次按钮 呢? 输入 第1行为三个正整数,表示N,A,B(

洛谷 P1135 奇怪的电梯x (dfs)

题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开,关,上,下.上下的层数等于当前楼层上的那个数字.当然,如果不能满足要求,相应的按钮就会失灵.例如:3 3 1 2 5代表了Ki(K1=3,K2=3,--),从一楼开始.在一楼,按"上"可以到4楼,按"下"是不起作用的,因为没有-2楼.那么,从A楼到B楼至少要按几次按钮

TYVJ P3522 &amp;&amp;洛谷 P1135 奇怪的电梯 Label:bfs

题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开,关,上,下.上下的层数等于当前楼层上的那个数字.当然,如果不能满足要求,相应的按钮就会失灵.例如:3 3 1 2 5代表了Ki(K1=3,K2=3,……),从一楼开始.在一楼,按“上”可以到4楼,按“下”是不起作用的,因为没有-2楼.那么,从A楼到B楼至少要按几次按钮呢? 输入输出格式 输入格式: 输入文件

奇怪的电梯//错误代码!!!!20分

§奇怪的电梯(lift.cpp) §[问题描述] §大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开,关,上,下.上下的层数等于当前楼层上的那个数字.当然,如果不能满足要求,相应的按钮就会失灵.例如:3 3 1 2 5代表了Ki(K1=3,K2=3,……),从一楼开始.在一楼,按“上”可以到4楼,按“下”是不起作用的,因为没有-2楼.那么,从A楼到B楼至少要按几次按钮呢? §[输入格式]lift.in §输入文件共

P1135 奇怪的电梯

P1135 奇怪的电梯 题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开,关,上,下.上下的层数等于当前楼层上的那个数字.当然,如果不能满足要求,相应的按钮就会失灵.例如:3 3 1 2 5代表了Ki(K1=3,K2=3,……),从一楼开始.在一楼,按“上”可以到4楼,按“下”是不起作用的,因为没有-2楼.那么,从A楼到B楼至少要按几次按钮呢? 输入输出格

【bfs】奇怪的电梯(P1135)

题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开,关,上,下.上下的层数等于当前楼层上的那个数字.当然,如果不能满足要求,相应的按钮就会失灵.例如:3 3 1 2 5代表了Ki(K1=3,K2=3,--),从一楼开始.在一楼,按"上"可以到4楼,按"下"是不起作用的,因为没有-2楼.那么,从A楼到B楼至少要按几次按钮

洛谷【P1135】奇怪的电梯 解题报告

[传送门]:http://www.luogu.org/problem/show?pid=1135 ---------------------------------------------------题目---------------------------------------------------------- 题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有

洛谷P1135 奇怪的电梯

题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼 (1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开,关,上,下.上下的层数等于当前楼层上的那个 数字.当然,如果不能满足要求,相应的按钮就会失灵.例如:3 3 1 2 5代表了Ki(K1=3,K2=3,……),从一楼开始.在一楼,按“上”可以到4楼,按“下”是不起作用的,因为没有-2楼.那么,从A楼到B楼至少要 按几次按钮呢? 输入输出格式 输入格式: 输

奇怪的电梯(HDU1548) (Dijkstra)或者(BFS)

问题 E: 奇怪的电梯 时间限制: 1 Sec  内存限制: 64 MB提交: 35  解决: 16[提交][状态][讨论版] 题目描述 有一天桐桐做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1≤i≤N)上有一个数字K:(0≤Ki≤N).电梯只有四 个按钮:开,关,上,下.上下的层数等于当前楼层上的那个数字.当然,如果不能满足要求,相应的按钮就会失灵.例如:3 3 1 2 5代表了Ki (K1=3,K2=3,…),从一楼开始.在一楼,按“上,”可以到4楼,按“下