C - Red and Black
来源:互联网 发布:淘宝开店基础知识 编辑:程序博客网 时间:2024/05/22 08:23
这道题可以这么说,第一次编写好的代码和AC的代码,除了几个关键字没改过,剩下的全都改了个遍。问题多到记不全了,只能把重要的下来。下面的知识是跟很多前辈学的!
1:在输入数字后输入字符的情况下,应该在有个特殊的处理
方法一:
scanf("%d\n");在%d后面加个\n就可以把数字后面的回车冲销掉,不会对后面将要输入的字符造成影响。
方法二:
scanf("%d");getchar();
getchar();起到冲销数字后面回车的作用
2:BFS算法的Q.front(); 和Q.pop();一般挨着写
3:对矩阵中一个元素的几个方向遍历时,可以建立两个数组依次存入对应的方向
例子:6*9的矩阵data[6][10]中对坐标为(7,1)‘元素的上下左右进行遍历,看这四个元素中哪个为’@‘,如果为’@‘,输出“Yes!”并换行。
我写的顺序为:上-->右-->下-->左
代码:
int x[4] = {0,1,0,-1};int y[4] = {1,0,-1,0};for(int i = 0; i < 4; i++){ if(data[7 + x[i]][1 + y[i]] == '@') printf("Yes!\n");}4:变量名不要和关键字或一些库函数名一样,比如count,写成Count就好啦!
5:输入一个二维字符数组,不必一个一个的输入,用gets();函数,每次读取一行。
例子:输入一个20*20的字符矩阵。
char data[21][21]; for(int i = 0 ; i < 20; i++) gets(data[i]);下面是我这道题AC的代码:
#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;struct vis{ int x; int y; vis(int x_,int y_) { x = x_; y = y_; }};struct vis visit(0,0);queue<vis> Q;int x[4] = {0,1,0,-1};int y[4] = {1,0,-1,0};char data[21][21];int flag[21][21];int c,r,row,column,Count;void BFS(){ while(!Q.empty()) { visit = Q.front(); Q.pop(); //cout << visit.x << ' ' << visit.y << endl; for(int i = 0; i < 4; i++) { if((visit.x + x[i] >= 0 && visit.x + x[i] < r) && (visit.y + y[i] >= 0 && visit.y + y[i] < c)) if(data[visit.x + x[i]][visit.y + y[i]] != '#') if(flag[visit.x + x[i]][visit.y + y[i]] == 0) { Count++; Q.push(vis(visit.x + x[i],visit.y + y[i])); flag[visit.x + x[i]][visit.y + y[i]] = 1; } } } cout << Count << endl;}int main(){ while(cin >> c >> r) { getchar(); if(c == 0 && r == 0) break; else { memset(flag,0,sizeof(flag)); Count = 1; for(int i = 0; i < r; i++) { gets(data[i]); for(int j = 0; j < c; j++) { if(data[i][j] == '@') { row = i,column = j; //cout << i << ' ' << j << endl; } } } flag[row][column] = 1; Q.push(vis(row,column)); BFS(); } } return 0;}
END
0 0
- C - Red and Black
- Red and Black
- red and black
- HDUOJ1312 Red and Black
- Red and Black
- red and black
- Red and Black
- HDOJ Red and Black
- HDU1312( Red and Black )
- Red and Black
- hdu1312 Red and Black
- 深搜:Red and Black
- 1038 Red and Black
- HDU1312 Red and Black
- HDU Red and Black
- Red and Black
- HDU1312:Red and Black
- 1001Red and Black
- 线性表练习题5
- 黑马程序员_IO
- poj1969
- 渣渣算法初步回顾---树状数组
- 腾讯2014校园实习生招聘
- C - Red and Black
- 老程序员的下场 程序员老了该怎么办?
- 表达式求值算法
- HDOJ 2478 Slides
- 洗心革面重新开始
- hdu2639-01背包(第k大背包问题)
- 十分钟让你明白Objective-C的语法(和Java、C++的对比)
- 反射的使用---创建对象
- 从虚拟机硬盘文件.vmdk恢复数据