欢迎访问 生活随笔!

生活随笔

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

c/c++

UVA1103分区涂色+vc使用注意事项

发布时间:2025/7/14 c/c++ 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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使用注意事项的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。