當前位置:
首頁 >
UVA1103分区涂色+vc使用注意事项
發布時間:2025/7/14
48
豆豆
生活随笔
收集整理的這篇文章主要介紹了
UVA1103分区涂色+vc使用注意事项
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這道題目沒有什么好說的,就是將不同區域涂成不同的顏色,特別要注意的是vis中一定不能使用0,
map的添加元素問題,尤其是map的第二個元素是一個set的時候,必須先創建一個set,然后再添加到map中去,不能直接添加。
另外,不必過于擔心棧溢出的情況,尤其是數據小的時候不溢出,數據大了的時候溢出的情況。
下面再來說說vc6.0的使用注意事項,雖然我也不想用這個玩意,但是復試的時候指定使用這個玩意,我也沒有辦法啊
第一點就是:在for(int i)的時候,如果前面使用過i那么在下一次定義一個for的時候,不能再使用i,而在vs中,不同的for循環中的i是可以一樣的
解決方式就是變成i_1,i_2這種形式
第二點就是,在使用STL(map,set等)的時候,需要使用std::。而且如果要想要使用第二個元素為set的map的時候,必須使用一下typedef,然后才能在map中使用。
還有一點就是如果vc發生了棧溢出,那么有可能再次編譯的時候會發生錯誤,這個時候應該迅速的創建一個新的工程。
下面貼上在vc上編譯通過,并且已經ac的代碼
//這題重新做一遍,使用劉汝佳的方式 #include<cstdio> #include<cstring> #include<string> #include<iostream> #include<set> #include<map> #include<algorithm> #include<vector> using namespace std;const int maxn = 200+5;char G[maxn][maxn]; char vis[maxn][maxn];int num_row,num_col; int Row,Col; int cnt = 1;int read_char() {int x;for(;;){x = getchar();if(x == '\n'||x=='\r')continue;if(isalpha(x))return x - 'a' + 10;else return x - '0';} } void print_G() {for(int i = 0;i < Row;i++){for(int j = 0;j < Col;j++){printf("%d",G[i][j]);}printf("\n");}printf("\n"); } void print_vis() {for(int i = 0;i < Row;i++){for(int j = 0;j < Col;j++){printf("%d",vis[i][j]);}printf("\n");}printf("\n"); }int dr[] = {-1,0,1,0}; int dc[] = {0,1,0,-1}; bool is_in_G(int r,int c) {if(r >= 0 && r < Row && c >= 0 && c< Col)return true;return false; }void DFS(int r,int c) {vis[r][c] = cnt;for(int i = 0; i < 4;i++){int row = r + dr[i];int col = c + dc[i];if(is_in_G(row,col) && !vis[row][col] && G[row][col] == G[r][c])//相等的才會去遍歷 {DFS(row,col);}}}int main() { #ifdef localfreopen("input.txt","r",stdin);freopen("output.txt","w",stdout); #endifint kase = 0;while(scanf("%d%d",&num_row,&num_col) == 2 && num_row){cnt = 1;printf("Case %d: ",++kase);memset(G,0,sizeof(G));memset(vis,0,sizeof(vis));for(int i_1 = 1;i_1 <= num_row;i_1++){for(int j_1 = 1;j_1 <= num_col;j_1++){int x = read_char();int pos = 4;while(pos){G[i_1][4 * j_1 + pos - 4] = x % 2;x = x / 2;pos--;}}}Row = num_row +2;Col = 4 * num_col + 2; //print_G();for(int i_2 = 0; i_2 < Row;i_2++){for(int j_2 = 0;j_2 < Col;j_2++){if(!vis[i_2][j_2]){DFS(i_2,j_2);cnt++;}}} //print_vis();//遍歷完的時候,不同區域是不同的顏色,邊界上都是0typedef std::set<int> Set;std::map<int,Set>MAP;//保存邊界的int,以及其對應的非0的顏色for(int i_3 = 0;i_3 < Row;i_3++){for(int j_3 = 0;j_3 < Col;j_3++){if(G[i_3][j_3]){if(!MAP.count(vis[i_3][j_3])){set<int>SET;MAP[vis[i_3][j_3]] = SET;}int row,col;for(int pos = 0;pos < 4; pos++){row = i_3 + dr[pos];col = j_3 + dc[pos];if(!G[row][col]&&vis[row][col]!=1)//不是背景色也不是邊界 {MAP[vis[i_3][j_3]].insert(vis[row][col]);}}}}}vector<char>V;char *convert = "WAKJSD";for(std::map<int,Set>::iterator it = MAP.begin();it!=MAP.end();it++){V.push_back(convert[it->second.size()]);}sort(V.begin(),V.end());for(int i_4 = 0;i_4 < V.size();i_4++){printf("%c",V[i_4]);}printf("\n");}return 0; }?
轉載于:https://www.cnblogs.com/TorettoRui/p/10452198.html
總結
以上是生活随笔為你收集整理的UVA1103分区涂色+vc使用注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS 7下用firewall-c
- 下一篇: C及C++中typedef的简单使用指南