题解

围棋遍历

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语言啥的,,,,还没有这些模块啥的出来。。。。所以,应该上面的操作是合法的。

全部评论

相关推荐

05-19 15:21
已编辑
门头沟学院 Java
白火同学:你才沟通了200,说实话,北上广深杭这里面你连一座城市的互联网公司都没投满呢,更别说还有各种准一线二线城市了。等你沟通突破了三位数,还没结果再考虑转行的事吧。
点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
实习,投递多份简历没人回...
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 17:00
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务