题解

围棋遍历

http://www.nowcoder.com/questionTerminal/2242f11982e44881b749d9d188f0ccf5

对于,C++,他给了我函数模块
还写了一个TODO

#include <stdio.h>
#include <string.h>

enum color {
    NONE, WHITE, BLACK,         //棋子颜色,NONE表示未落子
};
struct weiqi {
    enum color board[19][19];   //棋盘上每个位置的落子
};

//---------------------------------------------------- 
int test[19][19];//辅助BFS,用于剪枝
void BFS(struct weiqi *wq, int x, int y,int &res, int val)
{
    if((x<0)||(y<0)||(x>18)||(y>18))
    return ;

    if(val!=(wq->board[y][x]))
    return ;

    if(test[y][x]==0&&val==(wq->board[y][x]))
    {
        res++;
        test[y][x]=1;
    }
    else
    {
        return;
    }

    BFS(wq, x, y-1,res, val);//上 
    BFS(wq, x, y+1,res, val);//下 
    BFS(wq, x-1, y,res, val);//左 
    BFS(wq, x+1, y,res, val);//右 

    return ;
}

int calc(struct weiqi *wq, int x, int y)
{
    //TODO:
    int res=0;
    int val = wq->board[y][x];//坑的地方 
    if(val==0)//特殊情况 
    {
        return 0;
    }

    BFS(wq, x, y,res, val);
    return res; 
}
//------------------------------------------------------------------------
int input(struct weiqi *wq, int *x, int *y)
{
    int row, col;
    int ret;
    char buf[80];

    for (row = 0; row < 19; ++row) {
        if (fgets(buf, sizeof(buf), stdin) == NULL)
            return -1;
        if (strlen(buf) < 19)
            return -1;
        for (col = 0; col < 19; ++col) {
            switch (buf[col]) {
            case '0':
                wq->board[row][col] = NONE;
                break;
            case '1':
                wq->board[row][col] = WHITE;
                break;
            case '2':
                wq->board[row][col] = BLACK;
                break;
            default:
                return -1;
            }
        }
    }
    ret = fscanf(stdin, "%d,%d\n", x, y);
    if (ret != 2)
        return -1;
    for (row = 0 ; row < 19; ++row) {
        for (col = 0; col < 19; ++col) {
            fprintf(stderr, "%d ", wq->board[row][col]);
        }
        fprintf(stderr, "\n");
    }
    fprintf(stderr, "x = %d, y = %d\n", *x, *y);
    return 0;
}

int main()
{
    struct weiqi wq;
    int x = 0, y = 0;
    int cnt;

    memset(&wq, 0, sizeof(wq));
    if (input(&wq, &x, &y) < 0) {
        fprintf(stderr, "error!\n");
        return 1;
    }
    cnt = calc(&wq, x, y);

    printf("%d\n", cnt);
    return 0;
}

我就以为,只能在那个函数里面写,后面发现。。。(我提交之后,看别人的代码,发现他们有的————似乎也是这么做的)所以应该可以
我还可以在外面继续写其他函数。。。。还可以写全局变量。。。

这次的BFS,我AC掉了
本来想用队列和bool标记有没有被

PS:其实要是提交C语言啥的,,,,还没有这些模块啥的出来。。。。所以,应该上面的操作是合法的。

全部评论

相关推荐

ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务