解题思路:

注意事项:

参考代码:

#include<iostream>

#include<iterator>

#include<stdio.h>

#include<iomanip>

#include<string>

#include<cstring>

#include<string.h>

#include<vector>

#include<algorithm>

#include<stdio.h>

#include<math.h>

#include<map>

#include<set>

#include<vector>

#include<stack>

#include<queue>

#include<sstream>

using namespace std;

int n;

int num[21][21];

int v[21][21];

int Move[4][2] = { {0,-1},{1,0},{0,1},{-1,0} };

deque<int> sum;

int xnum[21];

int ynum[21];

int testx[21];

int testy[21];

deque<int> ans;

bool check()

{

bool flag=true;

for(int i=0;i<n;i++)

if (xnum[i] != testx[i])

{

flag = false;

return flag;

}

for (int i = 0; i < n; i++)

if (ynum[i] != testy[i])

{

flag = false;

return flag;

}


return flag;

}

void bfs(int x, int y)

{

sum.push_back(num[x][y]);

if (x == n - 1 && y == n - 1)

{

if(check())

ans = sum;

return;

}

for (int i = 0; i < 4; i++)

{

int itemp, ytemp;

itemp = x + Move[i][0];

ytemp = y + Move[i][1];

if (itemp != -1 && itemp != n && ytemp != -1 && ytemp != n && v[itemp][ytemp] != 1)

{

testx[itemp]++;

testy[ytemp]++;

v[itemp][ytemp] = 1;

bfs(itemp, ytemp);

sum.pop_back();

v[itemp][ytemp] = 0;

testx[itemp]--;

testy[ytemp]--;


}

}

}

int  main()

{

cin >> n;

for (int i = 0; i < n; i++)

cin >> ynum[i];

for (int j = 0; j < n; j++)

cin >> xnum[j];

int flag = 0;

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

num[i][j] = flag;

flag++;

}

}

v[0][0] = 1;

testx[0] = 1;

testy[0] = 1;

bfs(0, 0);

while (!ans.empty())

{

cout << ans.front()<<" ";

ans.pop_front();

}

return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论