函数calc计算围棋盘位置(x,y)处的棋子还有多少口气。 某个位置处的棋子还有多少口气的计算方法(简化计算):从该位置出发,向四个方向遍历,允许拐弯,但不允许走斜线。如果遇到边线和对方棋子,则认为不能继续往前走。遍历完成后统计遍历过程中遇到的未落子的位置个数,该位置个数即出发点棋子的气的数目。 enum color {     NONE, WHITE, BLACK,         // 棋子颜色,NONE表示未落子 }; struct weiqi {     enum color board[19][19];   // 棋盘上每个位置的落子 }; int calc(struct weiqi *wq, int x, int y) { }-笔试面试资料

这是qklbishe.com第8241 篇笔试面试资料
提供答案分析,通过本文《函数calc计算围棋盘位置(x,y)处的棋子还有多少口气。 某个位置处的棋子还有多少口气的计算方法(简化计算):从该位置出发,向四个方向遍历,允许拐弯,但不允许走斜线。如果遇到边线和对方棋子,则认为不能继续往前走。遍历完成后统计遍历过程中遇到的未落子的位置个数,该位置个数即出发点棋子的气的数目。
enum color {     NONE, WHITE, BLACK,         // 棋子颜色,NONE表示未落子 }; struct weiqi {     enum color board[19][19];   // 棋盘上每个位置的落子 }; int calc(struct weiqi *wq, int x, int y) { }-笔试面试资料》可以理解其中的代码原理,这是一篇很好的求职学习资料
本站提供程序员计算机面试经验学习,笔试经验,包括字节跳动/头条,腾讯,阿里,美团,滴滴出行,网易,百度,京东,小米,华为,微软等互联网大厂真题学习背诵。

答案:

函数calc计算围棋盘位置(x,y)处的棋子还有多少口气。
某个位置处的棋子还有多少口气的计算方法(简化计算):从该位置出发,向四个方向遍历,允许拐弯,但不允许走斜线。如果遇到边线和对方棋子,则认为不能继续往前走。遍历完成后统计遍历过程中遇到的未落子的位置个数,该位置个数即出发点棋子的气的数目。
enum color {
    NONE, WHITE, BLACK,         // 棋子颜色,NONE表示未落子
};
struct weiqi {
    enum color board[19][19];   // 棋盘上每个位置的落子
};
int calc(struct weiqi *wq, int x, int y)
{
}

C/C++

函数calc计算围棋盘位置(x,y)处的棋子还有多少口气。    某个位置处的棋子还有多少口气的计算方法(简化计算):从该位置出发,向四个方向遍历,允许拐弯,但不允许走斜线。如果遇到边线和对方棋子,则认为不能继续往前走。遍历完成后统计遍历过程中遇到的未落子的位置个数,该位置个数即出发点棋子的气的数目。             enum color {           NONE, WHITE, BLACK,         // 棋子颜色,NONE表示未落子       };       struct weiqi {           enum color board[19][19];   // 棋盘上每个位置的落子       };       int calc(struct weiqi *wq, int x, int y)       {       } 朱雀灬

#include <stdio.h> #include <string.h> #include <vector>  using std::vector;  int res = 0;  enum color {     NONE, WHITE, BLACK,         //棋子颜色,NONE表示未落子 }; struct weiqi {     enum color board[19][19];   //棋盘上每个位置的落子 };  int dx[4] = {-1, 1, 0, 0}; ////< @note 上下左右 int dy[4] = {0, 0, -1, 1}; void dfs(weiqi *wq, int x, int y, color &curColor, color &opColor) {     int newX = 0, newY = 0;     newX = x + dx[0]; newY = y + dy[0]; ////< @note 上     if (newX>=0 && (wq->board[newX][newY]==color::NONE || wq->board[newX][newY]==curColor)) {         if (wq->board[newX][newY]==color::NONE) ++res;         wq->board[newX][newY] = opColor;         wq->board[x][y] = opColor;         dfs(wq, newX, newY, curColor, opColor);     }     newX = x + dx[1]; newY = y + dy[1]; ////< @note 下     if (newX<19 && (wq->board[newX][newY]==color::NONE || wq->board[newX][newY]==curColor)) {         if (wq->board[newX][newY]==color::NONE) ++res;         wq->board[newX][newY] = opColor;         wq->board[x][y] = opColor;         dfs(wq, newX, newY, curColor, opColor);     }     newX = x + dx[2]; newY = y + dy[2]; ////< @note 左     if (newY>=0 && (wq->board[newX][newY]==color::NONE || wq->board[newX][newY]==curColor)) {         if (wq->board[newX][newY]==color::NONE) ++res;         wq->board[newX][newY] = opColor;         wq->board[x][y] = opColor;         dfs(wq, newX, newY, curColor, opColor);     }     newX = x + dx[3]; newY = y + dy[3]; ////< @note 右     if (newY<19 && (wq->board[newX][newY]==color::NONE || wq->board[newX][newY]==curColor)) {         if (wq->board[newX][newY]==color::NONE) ++res;         wq->board[newX][newY] = opColor;         wq->board[x][y] = opColor;         dfs(wq, newX, newY, curColor, opColor);     } }  int calc(struct weiqi *wq, int x, int y) {     //TODO:     int xx = y, yy = x;     if (wq->board[xx][yy] == color::NONE) {         return -1;     }     color curColor = wq->board[xx][yy];     color opColor = curColor==color::BLACK ? color::WHITE : color::WHITE;     wq->board[xx][yy] = opColor;     dfs(wq, xx, yy, curColor, opColor);     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,%dn", 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 = %dn", *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("%dn", cnt);     return 0; }

DFS解法,就是需要理解下一个方向的棋子如果是我方棋子,可以前进,但不能计数!

2021-03-22 23:40:24 回复(0)

文章部分来自互联网,侵权联系删除
www.qklbishe.com

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 函数calc计算围棋盘位置(x,y)处的棋子还有多少口气。 某个位置处的棋子还有多少口气的计算方法(简化计算):从该位置出发,向四个方向遍历,允许拐弯,但不允许走斜线。如果遇到边线和对方棋子,则认为不能继续往前走。遍历完成后统计遍历过程中遇到的未落子的位置个数,该位置个数即出发点棋子的气的数目。 enum color {     NONE, WHITE, BLACK,         // 棋子颜色,NONE表示未落子 }; struct weiqi {     enum color board[19][19];   // 棋盘上每个位置的落子 }; int calc(struct weiqi *wq, int x, int y) { }-笔试面试资料

提供最优质的资源集合

立即查看 了解详情