闲谈:这题太***了,我就不解释了.先试了发迭代加深,主要是测试自己会搜不,我也知道会t..)
这是迭代加深的代码:
#include <bits//stdc++.h>
using namespace std;
typedef pair<int,int> pi;
const int N=200;
char an[N][N];
int dx[8]={-2,-1,-2,-1,2,2,1,1};
int dy[8]={1,2,-1,-2,1,-1,-2,2};
int n,m;
bool ck(int x,int y)
{
if(x<0||x>n||y<0||y>m||an[x][y]=='*') return false;
return true;
}
bool dfs(int dep,pi start,pi end)
{
if(start==end) return true;
if(dep==0) return false;
for(int i=0;i<8;i++)
{
int ix=start.first+dx[i];int iy=start.second+dy[i];
if(ck(ix,iy))
{
pi temp={ix,iy};
if(dfs(dep-1,temp,end)) return true;
}
}
return false;
}
int main()
{
pi start,end;
cin>>m>>n;//m列n行.
for(int i=0;i<n;i++) cin>>an[i];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(an[i][j]=='K') start={i,j};
else if(an[i][j]=='H') end={i,j};
}
}
int depth=0;
while(!dfs(depth,start,end)) depth++;
cout<<depth<<endl;
return 0;
}这是bfs代码:
#include <bits//stdc++.h>
using namespace std;
typedef pair<int,int> pi;
const int N=200;
char an[N][N];
int dis[N][N];
int dx[8]={-2,-1,-2,-1,2,2,1,1};
int dy[8]={1,2,-1,-2,1,-1,-2,2};
int n,m;
int st[N][N];
pi start,ed;
bool ck(int x,int y)
{
if(x<0||x>n||y<0||y>m||an[x][y]=='*') return false;
return true;
}
int bfs()
{
memset(dis,0x3f,sizeof dis);
queue<pi>q;
q.push(start);
dis[start.first][start.second]=0;
while(q.size())
{
pi temp=q.front();
st[temp.first][temp.second]=true;
q.pop();
if(temp==ed) return dis[ed.first][ed.second];
for(int i=0;i<8;i++)
{
int ix=temp.first+dx[i];
int iy=temp.second+dy[i];
if(st[ix][iy]) continue;
if(ck(ix,iy))
{
if(dis[temp.first][temp.second]+1<dis[ix][iy])
{
dis[ix][iy]=dis[temp.first][temp.second]+1;
q.push({ix,iy});
}
}
}
}
}
int main()
{
cin>>m>>n;//m列n行.
for(int i=0;i<n;i++) cin>>an[i];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(an[i][j]=='K') start={i,j};
else if(an[i][j]=='H') ed={i,j};
}
}
cout<<bfs()<<endl;
return 0;
}
京公网安备 11010502036488号