UVA1103分区涂色+vc使用注意事项
這道題目沒有什么好說的,就是將不同區(qū)域涂成不同的顏色,特別要注意的是vis中一定不能使用0,
map的添加元素問題,尤其是map的第二個(gè)元素是一個(gè)set的時(shí)候,必須先創(chuàng)建一個(gè)set,然后再添加到map中去,不能直接添加。
另外,不必過于擔(dān)心棧溢出的情況,尤其是數(shù)據(jù)小的時(shí)候不溢出,數(shù)據(jù)大了的時(shí)候溢出的情況。
下面再來說說vc6.0的使用注意事項(xiàng),雖然我也不想用這個(gè)玩意,但是復(fù)試的時(shí)候指定使用這個(gè)玩意,我也沒有辦法啊
第一點(diǎn)就是:在for(int i)的時(shí)候,如果前面使用過i那么在下一次定義一個(gè)for的時(shí)候,不能再使用i,而在vs中,不同的for循環(huán)中的i是可以一樣的
解決方式就是變成i_1,i_2這種形式
第二點(diǎn)就是,在使用STL(map,set等)的時(shí)候,需要使用std::。而且如果要想要使用第二個(gè)元素為set的map的時(shí)候,必須使用一下typedef,然后才能在map中使用。
還有一點(diǎn)就是如果vc發(fā)生了棧溢出,那么有可能再次編譯的時(shí)候會(huì)發(fā)生錯(cuò)誤,這個(gè)時(shí)候應(yīng)該迅速的創(chuàng)建一個(gè)新的工程。
下面貼上在vc上編譯通過,并且已經(jīng)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])//相等的才會(huì)去遍歷 {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();//遍歷完的時(shí)候,不同區(qū)域是不同的顏色,邊界上都是0typedef std::set<int> Set;std::map<int,Set>MAP;//保存邊界的int,以及其對(duì)應(yīng)的非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; }?
轉(zhuǎn)載于:https://www.cnblogs.com/TorettoRui/p/10452198.html
總結(jié)
以上是生活随笔為你收集整理的UVA1103分区涂色+vc使用注意事项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS 7下用firewall-c
- 下一篇: bzoj 2870 最长道路tree——