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