日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

CSP认证201512-3画图[C++题解]:dfs、左下角建系、坐标反着读入

發布時間:2025/4/5 c/c++ 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CSP认证201512-3画图[C++题解]:dfs、左下角建系、坐标反着读入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目分析



來源:acwing

分析:
這題就是畫圖,劃線的話直接for循環來做;填字母的時候用的dfs。不過有幾點需要注意。

  • 本題起點在左下角,x方向向右,y方向向左。這跟平時我們從左上角是反著的。舉個例子,0 1 0 2 0這個讀入,0表示操作;后面4個數字表示起點和終點坐標,這里(1, 0) 和(2, 0)不是同一列,而是在同一行!!!所以它的x和y坐標是反著的。
  • 那如何處理呢?將坐標反著讀入。這樣就可以按照正常的從左上角建系的習慣來讀了!!!
  • // x和y反著讀入int x1, y1, x2, y2;cin >> y1 >> x1 >> y2 >> x2;
  • 注意前面的坐標不一定比后面的坐標小,所以記得swap一下,讓前面的坐標更小。
  • 輸出呢? 輸出的時候, 行需要從下往上輸出,即n-1 到0;而縱坐標j從小到大輸出。
  • ac代碼

    #include<bits/stdc++.h> using namespace std; const int N = 110; int n, m ,q;char g[N][N]; bool st[N][N];void change(int x1, int y1, int x2, int y2){if(x1 == x2){// 同一行for(int i = y1; i <= y2; i ++){if( g[x1][i] == '|'|| g[x1][i] == '+') g[x1][i]= '+';else g[x1][i] = '-';}}// 同一列else if ( y1 == y2){for(int i = x1; i <= x2; i ++){if( g[i][y1] == '-' || g[i][y1] == '+') g[i][y1] = '+';else g[i][y1] = '|';}} }void paint(int x, int y, char s){st[x][y] = true;g[x][y] = s;int dx[4] = { -1, 0, 1, 0}, dy[4] = { 0, 1, 0, -1};for(int i = 0; i < 4; i ++){int a = x + dx[i], b = y + dy[i];if(a < 0 || a >= n || b < 0 || b >= m || st[a][b]) continue;if(g[a][b] == '|' || g[a][b] == '-' || g[a][b] == '+') continue;g[a][b] = s;paint(a, b, s);} } int main(){cin >> m >> n >> q;for(int i = 0; i < n; i ++)for(int j = 0; j < m; j ++)g[i][j] = '.';while(q --){int op;cin >> op;if(op == 0){// x和y反著讀入int x1, y1, x2, y2;cin >> y1 >> x1 >> y2 >> x2;if(x1 > x2) swap(x1, x2);if(y1 > y2) swap(y1, y2);change(x1, y1, x2, y2);}else{int x, y;char s;// x和y反著讀入cin >> y >> x >> s;memset(st, 0, sizeof st);paint(x, y, s);}}for(int i = n -1; i >= 0; i--){for(int j = 0; j < m; j++)cout << g[i][j];cout << endl;} }

    題目鏈接

    https://www.acwing.com/problem/content/3227/

    總結

    以上是生活随笔為你收集整理的CSP认证201512-3画图[C++题解]:dfs、左下角建系、坐标反着读入的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。