csp题库201512-3 画图
题目:
题目思路:
在认真阅读题目之后,这个题目与我们之前练习过得搜索(DFS,BFS)时的迷宫问题很相似,迷宫问题是,在一个二维数组中,界定好了迷宫,让我们在迷宫内部中通过DFS,BFS的搜索来进行行走,获取一些相关的答案,这个问题是给我们界定好了一张画板。然后让我们先在画板上进行画迷宫的操作和用字符填充迷宫内部的操作那么我们很显然可以大致地将这个题目分为两个部分进行操作:1:画迷宫。2:填充字符。画好迷宫后,我们就可以在迷宫内部,利用搜索的相关算法(DFS,BFS)来遍历迷宫的内部,进而使用字符进行填充。
相关的细节实现,关于数据的储存,一个字符类型的二维数组ans用于存储答案,所有的函数都是为了操作这个二维数组ans用于获得答案,一个二维数组vis用于在BFS时关于某个点是否到达的判断。具体的实现是这样的几个函数,第一个函数lianxian用于画出边界,需要注意的细节是,横竖交接时的判定以及画线时注意调整画线的方向。第二个函数tianchnog用BFS在边界内进行填充,需要注意的是当前点能够被填充的条件,并不是当前点是小数点,而应该在每次填充时重新初始化vis数组,条件是没有到达,且在边界内。一个函数output用于输出结果数组,注意的是纵坐标应该从上往下输出。然后主函数不断地填充,画线,最后输出即可。
代码实现:
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
struct node
{
int x;
int y;
};
char ans[110][110];
bool vis[110][110];
int n,m,q;
int i,j,k;
int lable;
int a1,b1,a2,b2;
int a0,b0;
char c0;
void lianxian(int x1,int y1,int x2,int y2)//连线
{
if(x1 == x2)
{
if(y1 > y2)
{
swap(y1