首页 > 代码库 > CCF_ 201512-3_画图
CCF_ 201512-3_画图
直接模拟就行了,注意坐标系方向与平常数组不一样,填充操作用深搜和广搜都可以,这里用了广搜。
#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;struct point{ int x,y;};int m,n,q,dir[][2] = {{0,1},{0,-1},{-1,0},{1,0}};char a[105][105];void line(){ int x1,x2,y1,y2; cin >> x1 >> y1 >> x2 >> y2; if(x1 == x2) { int down = min(y1,y2),up = max(y1,y2); for(int i = down;i <= up;i++) { if(a[i][x1] == ‘-‘ || a[i][x1] == ‘+‘) a[i][x1] = ‘+‘; else a[i][x1] = ‘|‘; } } else { int left = min(x1,x2),right = max(x1,x2); for(int i = left;i <= right;i++) { if(a[y1][i] == ‘|‘ || a[y1][i] == ‘+‘) a[y1][i] = ‘+‘; else a[y1][i] = ‘-‘; } }}void bfs(){ point start; char str; cin >> start.x >> start.y >> str; a[start.y][start.x] = str; queue<point> q; q.push(start); while(!q.empty()) { int x = q.front().x,y = q.front().y; q.pop(); for(int i = 0;i < 4;i++) { int xx = x+dir[i][0],yy = y+dir[i][1]; if(xx < 0 || xx >= m || yy < 0 || yy >= n || a[yy][xx] == ‘-‘ || a[yy][xx] == ‘|‘ || a[yy][xx] == ‘+‘ || a[yy][xx] == str) continue; point temp; temp.x = xx; temp.y = yy; q.push(temp); a[yy][xx] = str; } }}int main(){ cin >> m >> n >>q; for(int i = 0;i < n;i++) { for(int j = 0;j < m;j++) a[i][j] = ‘.‘; } while(q--) { int flag; cin >> flag; if(flag) bfs(); else line(); } for(int i = n-1;i >= 0;i--) { for(int j = 0;j < m;j++) cout << a[i][j]; cout << endl; } return 0;}
CCF_ 201512-3_画图
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。