题目链接:
思路:由于数据不是很大,我们可以枚举骑士最后聚集的位置,然后枚举的时候用bfs搜索即可。
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define MAXN 14 9 10 struct Node{11 int x,y,step;12 Node(){}13 Node(int _x,int _y,int _step):x(_x),y(_y),step(_step){}14 };15 int n,m,min_step;16 char map[MAXN][MAXN];17 bool mark[MAXN][MAXN];18 int dir[8][2]={ { 1,2},{ 1,-2},{ 2,1},{ 2,-1},{-1,2},{-1,-2},{-2,1},{-2,-1}};19 vector > >g;20 21 int bfs(Node &st,Node &ed)22 {23 memset(mark,false,sizeof(mark));24 queue que;25 que.push(st);26 mark[st.x][st.y]=true;27 while(!que.empty()){28 Node q,p=que.front();29 que.pop();30 if(p.x==ed.x&&p.y==ed.y){31 return p.step;32 }33 for(int i=0;i<8;i++){34 q.x=p.x+dir[i][0];35 q.y=p.y+dir[i][1];36 if(q.x>=0&&q.x =0&&q.y ='1'&&map[i][j]<='9')g.push_back((make_pair(map[i][j]-'0',make_pair(i,j))));83 }84 }85 printf("Case %d: ",t++);86 Solve();87 }88 return 0;89 }