这道题其实是我练习dp的时候看到的,这道题应该归在dp里吗??(可能是我太菜了dp不会做吧。。。)我直接用dfs做了,还是比较容易的一道dfs题目。
思路:dfs每一步的坐标,三种情况 :1.向前一步 2.向后一步 3.如果有隧道,进入隧道。附上代码应该还是很好懂的。
#include<bits/stdc++.h>
using namespace std;
int mp[300];
int n,m;
int ans=INT_MAX;
bool vst[300];
void dfs(int x,int p)
{
if(x==m)
{
ans=min(ans,p);
return;
}
if(p>ans||x<0) return;
if(vst[x+1])
{
vst[x+1]=false;
dfs(x+1,p+1);
vst[x+1]=true;
}
if(x-1>=0&&vst[x-1])
{
vst[x-1]=false;
dfs(x-1,p+1);
vst[x-1]=true;
}
if(mp[x]!=-1&&vst[mp[x]])
{
vst[mp[x]]=false;
dfs(mp[x],p+1);
vst[mp[x]]=true;
}
}
int main()
{
cin>>m>>n;
memset(mp,-1,sizeof(mp));
memset(vst,true,sizeof(vst));
for(int i=0;i<n;i++)
{
int x,y;
cin>>x>>y;
mp[x]=y;
}
vst[0]=false;
dfs(0,0);
cout<<ans;
return 0;
}



京公网安备 11010502036488号