算法习题---4-3黑白棋(UVa220)
一:题目
- 系统提示当前旗手W/B(白/黑)下子,例如W下子,那么W下的位置必须是夹住黑色棋子的位置才可以。
- 夹住方式:横向、竖向、斜向
- 注意落子后将夹住的黑棋吞噬变为白棋
(一)题目详解
- .棋盘以数组表示,“W”表示白子,“B”表示黑子,“-”表示空格
- .棋盘大小8行8列
(二)样例输入
- 2 //第一行是游戏局数
- -------- //开始输入棋盘
- --------
- --------
- ---WB---
- ---BW---
- --------
- --------
- --------
- W //棋盘后,直接输入当前旗手
- L //L是提示命令,如果当前有位置可以下子,则提示(3,5) (4,6) (5,3) (6,4) <前面是可以走的坐标>,如果没有位置可以走,提示No legal move. 则轮到对方黑棋下子。
- M35 //M是下子命令,35表示落子在3行5列,落子后显示当前棋盘剩余棋子数 Black - 1 White - 4
- L
- Q //Q是退出命令,退出时将当前棋盘数据打印
- WWWWB---
- WWWB----
- WWB-----
- WB------
- --------
- --------
- --------
- --------
- B
- L
- M25
- L
- Q
(三)样例输出
- (,) (,) (,) (,) //对于L提示命令
- Black - White - 4 //对于M35落子命令,提示棋盘当前棋子数
- (,) (,) (,) //对于L提示命令
- -------- //对于Q退出命令,打印棋盘
- --------
- ----W---
- ---WW---
- ---BW---
- --------
- --------
- --------
- No legal move.
- Black - White -
- (,)
- WWWWB---
- WWWWW---
- WWB-----
- WB------
- --------
- --------
- --------
- --------
二:代码实现
(一)第一版本:400+行,但是解析详细
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define N 8
- char QP[N+][N+]; //棋盘信息
- char player; //旗手信息
- char OP; //对手信息
- bool Oper[]; //获取操作数据
信息获取和展示
- //获取棋盘信息、旗手信息
- void getQPInfo()
- {
- //获取棋盘信息
- for (int i = ; i <= N; i++)
- {
- for (int j = ; j <= N; j++)
- scanf("%c", &QP[i][j]);
- getchar();
- }
- //获取旗手信息、对手信息
- scanf("%c", &player);
- while (player=='\n')
- scanf("%c", &player);
- player == 'W' ? OP = 'B' : OP = 'W';
- getchar();
- }
- //打印棋盘信息
- void showQPInfo()
- {
- for (int i = ; i <= N; i++)
- {
- for (int j = ; j <= N; j++)
- printf("%c", QP[i][j]);
- printf("\n");
- }
- }
- //打印可以走的步数
- void printDataOper()
- {
- for (int i = ; i <= ; i++)
- if (Oper[i])
- printf("(%d,%d) ", i / , i % );
- printf("\n");
- }
- //打印棋子数目
- void printNumber()
- {
- int w = , b = ;
- for (int i = ; i <= N; i++)
- for (int j = ; j <= N; j++)
- if (QP[i][j] == 'W')
- w++;
- else if (QP[i][j] == 'B')
- b++;
- printf("Black - %d White - %d\n", b, w);
- }
- //交换旗手位置
- void ExchangePlayer()
- {
- if (player == 'W')
- {
- player = 'B';
- OP = 'W';
- }
- else
- {
- player = 'W';
- OP = 'B';
- }
- }
若是落子后,将夹住的对方棋子同化《版本二简化》
- void dealAllOP(int n, int m)
- {
- //判断四周是否有对手棋子
- int x, y;
- //先判断左上
- x = n-, y = m-;
- if (x >= && y >= && QP[x][y] == OP)
- {
- //夹住对手
- while (QP[x][y] == OP&&x >= && y >= )
- {
- x--;
- y--;
- }
- if (x >= && y >= && QP[x][y] == player) //对面也是自己棋子,成功夹住,可以吞噬
- {
- x = n - , y = m - ;
- while (x >= && y >= &&QP[x][y]!='-')
- {
- QP[x][y] = player;
- x--;
- y--;
- }
- }
- }
- //再判断上方
- x = n-, y = m;
- if (x >= && QP[x][y] == OP)
- {
- //夹住对手
- while (QP[x][y] == OP&&x >= )
- {
- x--;
- }
- if (x >= && QP[x][y] == player) //对面也是自己棋子,成功夹住,可以吞噬
- {
- x = n - , y = m;
- while (x >= && QP[x][y] != '-')
- {
- QP[x][y] = player;
- x--;
- }
- }
- }
- //再判断右上
- x = n - , y = m + ;
- if (x >= && y<= && QP[x][y] == OP)
- {
- //夹住对手
- while (QP[x][y] == OP&&x >= && y <= )
- {
- x--;
- y++;
- }
- if (x >= && y <= && QP[x][y] == player) //对面也是自己棋子,成功夹住,可以吞噬
- {
- x = n - , y = m + ;
- while (x >= && y <= && QP[x][y] != '-')
- {
- QP[x][y] = player;
- x--;
- y++;
- }
- }
- }
- //再判断左
- y = m - ,x=n;
- if (y >= && QP[x][y] == OP)
- {
- //夹住对手
- while (QP[x][y] == OP&&y >= )
- {
- y--;
- }
- if (y>= && QP[x][y] == player) //对面也是自己棋子,成功夹住,可以吞噬
- {
- y = m - , x = n;
- while (y >= && QP[x][y] != '-')
- {
- QP[x][y] = player;
- y--;
- }
- }
- }
- //再判断右
- x = n, y = m+;
- if (y <= && QP[x][y] == OP)
- {
- //夹住对手
- while (QP[x][y] == OP&&y <= )
- {
- y++;
- }
- if (y <= && QP[x][y] == player) //对面也是自己棋子,成功夹住,可以吞噬
- {
- x = n, y = m + ;
- while (y <= && QP[x][y] != '-')
- {
- QP[x][y] = player;
- y++;
- }
- }
- }
- //再判断左下
- x = n + , y = m - ;
- if (x <= && y >= && QP[x][y] == OP)
- {
- //夹住对手
- while (QP[x][y] == OP&&x <= && y >= )
- {
- x++;
- y--;
- }
- if (x <= && y >= && QP[x][y] == player) //对面也是自己棋子,成功夹住,可以吞噬
- {
- x = n + , y = m - ;
- while (x <= && y >= && QP[x][y] != '-')
- {
- QP[x][y] = player;
- x++;
- y--;
- }
- }
- }
- //再判断下
- x = n + , y = m;
- if (x <= && QP[x][y] == OP)
- {
- //夹住对手
- while (QP[x][y] == OP&&x <= )
- {
- x++;
- }
- if (x <= && QP[x][y] == player) //对面也是自己棋子,成功夹住,可以吞噬
- {
- x = n + , y = m;
- while (x <= && QP[x][y] != '-')
- {
- QP[x][y] = player;
- x++;
- }
- }
- }
- //再判断右下
- x = n + , y = m + ;
- if (x <= && y <= && QP[x][y] == OP)
- {
- //夹住对手
- while (QP[x][y] == OP&&x <= && y <= )
- {
- x++;
- y++;
- }
- if (x <= && y <= && QP[x][y] == player) //对面也是自己棋子,成功夹住,可以吞噬
- {
- x = n + , y = m + ;
- while (x <= && y <= && QP[x][y] != '-')
- {
- QP[x][y] = player;
- x++;
- y++;
- }
- }
- }
- }
判断对方棋子四周8个方向是否可以落子《版本二简化》
- bool judgePlayAtSite(int n,int m)
- {
- bool flag = false;
- int x, y;
- //先判断左上
- x = n, y = m;
- if ((x - ) >= && (y - ) >= && QP[x - ][y - ] == '-')
- {
- //可以落子,判断是否合理
- while (QP[x][y]==OP&&x<=&&y<=)
- {
- x++;
- y++;
- }
- if (x <= && y <= &&QP[x][y] == player) //位置合理 落子合理
- {
- Oper[(n-) * + m-] = true;
- flag = true;
- }
- }
- //再判断上方
- x = n, y = m;
- if ((x - ) >= && QP[x - ][y] == '-')
- {
- //可以落子,判断是否合理
- while (QP[x][y] == OP&&x <= )
- x++;
- if (x <= && QP[x][y] == player) //位置合理 落子合理
- {
- Oper[(n - ) * + m] = true;
- flag = true;
- }
- }
- //再判断右上
- x = n, y = m;
- if ((x - ) >= && (y + ) <= && QP[x - ][y + ] == '-')
- {
- //可以落子,判断是否合理
- while (QP[x][y] == OP&&x <= && y >= )
- {
- x++;
- y--;
- }
- if (x <= && y >= && QP[x][y] == player) //位置合理 落子合理
- {
- Oper[(n-) * + m+] = true;
- flag = true;
- }
- }
- //再判断左
- x = n, y = m;
- if ((y - ) >= && QP[x][y - ] == '-')
- {
- //可以落子,判断是否合理
- while (QP[x][y] == OP && y <= )
- {
- y++;
- }
- if (y <= && QP[x][y] == player) //位置合理 落子合理
- {
- Oper[n * + m-] = true;
- flag = true;
- }
- }
- //再判断右
- x = n, y = m;
- if ((y + ) <= && QP[x][y + ] == '-')
- {
- //可以落子,判断是否合理
- while (QP[x][y] == OP && y >= )
- {
- y--;
- }
- if (y >= && QP[x][y] == player) //位置合理 落子合理
- {
- Oper[n * + m+] = true;
- flag = true;
- }
- }
- //再判断左下
- x = n, y = m;
- if ((x + ) <= && (y - ) >= && QP[x + ][y - ] == '-')
- {
- //可以落子,判断是否合理
- while (QP[x][y] == OP&&x >= && y <= )
- {
- x--;
- y++;
- }
- if (x >= && y <= && QP[x][y] == player) //位置合理 落子合理
- {
- Oper[(n+) * + m-] = true;
- flag = true;
- }
- }
- //再判断下
- x = n, y = m;
- if ((x + ) <= && QP[x + ][y] == '-')
- {
- //可以落子,判断是否合理
- while (QP[x][y] == OP&&x >= )
- {
- x--;
- }
- if (x >= && QP[x][y] == player) //位置合理 落子合理
- {
- Oper[(n+) * + m] = true;
- flag = true;
- }
- }
- //再判断右下
- x = n, y = m;
- if ((x + ) <= && (y + ) <= && QP[x + ][y + ] == '-')
- {
- //可以落子,判断是否合理
- while (QP[x][y] == OP&&x >= && y >= )
- {
- x--;
- y--;
- }
- if (x >= && y >= && QP[x][y] == player) //位置合理 落子合理
- {
- Oper[(n+) * + m+] = true;
- flag = true;
- }
- }
- return flag;
- }
判断是否当前旗手是否可以落子
- bool judgeRunPlayer()
- {
- //初始化步操作
- bool flag = false;
- memset(Oper, false, sizeof(Oper));
- //循环棋盘,找到对方棋子,判断对方棋子四周是否可以落子
- for (int i = ; i <= N; i++)
- {
- for (int j = ; j <= N; j++)
- {
- if (QP[i][j] == OP) //判断四周是否可以落子
- if (judgePlayAtSite(i, j))
- flag = true;
- }
- }
- //如果步数无效,则调换对手
- if (flag == false)
- ExchangePlayer();
- return flag;
- }
处理命令
- void dealCommand()
- {
- char comm;
- int x, y, temp;
- while ()
- {
- scanf("%c", &comm);
- switch (comm)
- {
- case 'M': //落子
- scanf("%d", &temp);
- x = temp / ;
- y = temp % ;
- //开始处理棋盘信息
- QP[x][y] = player;
- dealAllOP(x, y);
- ExchangePlayer();
- printNumber(); //输出棋盘棋子数
- break;
- case 'L': //提示信息
- //先判断当前旗手是否可以落子
- if (judgeRunPlayer()) //打印数据
- printDataOper();
- else
- printf("No legal move.\n");
- break;
- case 'Q': //退出游戏、打印棋盘
- showQPInfo();
- printf("\n");
- getchar();
- return;
- }
- getchar();
- }
- }
主函数
- int main()
- {
- FILE* fp = freopen("data3.in", "r", stdin);
- freopen("data3.out", "w", stdout);
- int num;
- scanf("%d", &num);
- getchar();
- while (num--)
- {
- getQPInfo();
- dealCommand();
- }
- freopen("CON", "r", stdin);
- freopen("CON", "w", stdout);
- return ;
- }
(二)第二版本:200+行,对两处函数进行了修改,含空行和注释
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define N 8
- char QP[N+][N+]; //棋盘信息
- char player; //旗手信息
- char OP; //对手信息
- bool Oper[]; //获取操作数据
- //8个方向 左上、上、右上、左、右、左下、下、右下
- int x_dir[] = { -, -, -, , , , , };
- int y_dir[] = { -, , , -, , -, , };
- //获取棋盘信息、旗手信息
- void getQPInfo()
- {
- //获取棋盘信息
- for (int i = ; i <= N; i++)
- {
- for (int j = ; j <= N; j++)
- scanf("%c", &QP[i][j]);
- getchar();
- }
- //获取旗手信息、对手信息
- scanf("%c", &player);
- while (player=='\n')
- scanf("%c", &player);
- player == 'W' ? OP = 'B' : OP = 'W';
- getchar();
- }
- //打印棋盘信息
- void showQPInfo()
- {
- for (int i = ; i <= N; i++)
- {
- for (int j = ; j <= N; j++)
- printf("%c", QP[i][j]);
- printf("\n");
- }
- }
- //打印可以走的步数
- void printDataOper()
- {
- for (int i = ; i <= ; i++)
- if (Oper[i])
- printf("(%d,%d) ", i / , i % );
- printf("\n");
- }
- //打印棋子数目
- void printNumber()
- {
- int w = , b = ;
- for (int i = ; i <= N; i++)
- for (int j = ; j <= N; j++)
- if (QP[i][j] == 'W')
- w++;
- else if (QP[i][j] == 'B')
- b++;
- printf("Black - %d White - %d\n", b, w);
- }
- //交换旗手位置
- void ExchangePlayer()
- {
- if (player == 'W')
- {
- player = 'B';
- OP = 'W';
- }
- else
- {
- player = 'W';
- OP = 'B';
- }
- }
- //判断对方四周是否可以落子
- bool judgePlayAtSite(int n, int m)
- {
- bool flag = false;
- int x, y;
- for (int i = ; i < ; i++) //循环8个方向
- {
- x = n, y = m;
- if ((x + x_dir[i]) >= && (x + x_dir[i]) <= && (y + y_dir[i]) >= && (y + y_dir[i]) <= && QP[x + x_dir[i]][y + y_dir[i]] == '-')
- {
- //可以落子,判断是否合理
- while (QP[x][y] == OP&&x <= && x >= && y <= && y >= )
- {
- x -= x_dir[i];
- y -= y_dir[i];
- }
- if (x <= && x >= && y <= && y >= && QP[x][y] == player) //位置合理 落子合理
- {
- Oper[(n + x_dir[i]) * + m + y_dir[i]] = true;
- flag = true;
- }
- }
- }
- return flag;
- }
- //将当前落子后的棋子夹住的棋子吞噬
- void dealAllOP(int n, int m)
- {
- //判断四周是否有对手棋子
- int x, y;
- for (int i = ; i < ; i++)
- {
- x = n + x_dir[i], y = m + y_dir[i];
- if (x >= && x <= && y >= && y <= && QP[x][y] == OP)
- {
- //夹住对手
- while (QP[x][y] == OP&&x >= && x <= && y >= && y <= )
- {
- x += x_dir[i];
- y += y_dir[i];
- }
- if (x >= && x <= && y >= && y <= && QP[x][y] == player) //对面也是自己棋子,成功夹住,可以吞噬
- {
- x = n + x_dir[i], y = m + y_dir[i];
- while (x >= && x <= && y >= && y <= && QP[x][y] != '-')
- {
- QP[x][y] = player;
- x += x_dir[i];
- y += y_dir[i];
- }
- }
- }
- }
- }
- //判断是否当前旗手是否可以落子
- bool judgeRunPlayer()
- {
- //初始化步操作
- bool flag = false;
- memset(Oper, false, sizeof(Oper));
- //循环棋盘,找到对方棋子,判断对方棋子四周是否可以落子
- for (int i = ; i <= N; i++)
- {
- for (int j = ; j <= N; j++)
- {
- if (QP[i][j] == OP) //判断四周是否可以落子
- if (judgePlayAtSite(i, j))
- flag = true;
- }
- }
- //如果步数无效,则调换对手
- if (flag == false)
- ExchangePlayer();
- return flag;
- }
- //处理命令
- void dealCommand()
- {
- char comm;
- int x, y, temp;
- while ()
- {
- scanf("%c", &comm);
- switch (comm)
- {
- case 'M': //落子
- scanf("%d", &temp);
- x = temp / ;
- y = temp % ;
- //开始处理棋盘信息
- QP[x][y] = player;
- dealAllOP(x, y);
- ExchangePlayer();
- printNumber(); //输出棋盘棋子数
- break;
- case 'L': //提示信息
- //先判断当前旗手是否可以落子
- if (judgeRunPlayer()) //打印数据
- printDataOper();
- else
- printf("No legal move.\n");
- break;
- case 'Q': //退出游戏、打印棋盘
- showQPInfo();
- printf("\n");
- getchar();
- return;
- }
- getchar();
- }
- }
- //主函数
- void main()
- {
- FILE* fp = freopen("data3.in", "r", stdin);
- freopen("data3.out", "w", stdout);
- int num;
- scanf("%d", &num);
- getchar();
- while (num--)
- {
- getQPInfo();
- dealCommand();
- }
- freopen("CON", "r", stdin);
- freopen("CON", "w", stdout);
- }
(三)第三版本:100+行,同网上其他形式,去掉注释,进行空行缩减,语句简写
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define N 8
- char QP[N+][N+]; //棋盘信息
- char player; //旗手信息
- char OP; //对手信息
- bool Oper[]; //获取操作数据
- int x_dir[] = { -, -, -, , , , , };
- int y_dir[] = { -, , , -, , -, , };
- void getQPInfo()
- {
- for (int i = ; i <= N; i++)
- {
- for (int j = ; j <= N; j++)
- scanf("%c", &QP[i][j]);
- getchar();
- }
- scanf("%c", &player);
- while (player == '\n') scanf("%c", &player);
- player == 'W' ? OP = 'B' : OP = 'W';
- getchar();
- }
- void showQPInfo()
- {
- for (int i = ; i <= N; i++)
- {
- for (int j = ; j <= N; j++)
- printf("%c", QP[i][j]);
- printf("\n");
- }
- }
- void printDataOper()
- {
- for (int i = ; i <= ; i++)
- if (Oper[i]) printf("(%d,%d) ", i / , i % );
- printf("\n");
- }
- void printNumber()
- {
- int w = , b = ;
- for (int i = ; i <= N; i++)
- for (int j = ; j <= N; j++)
- if (QP[i][j] == 'W') w++;
- else if (QP[i][j] == 'B') b++;
- printf("Black - %d White - %d\n", b, w);
- }
- void ExchangePlayer()
- {
- if (player == 'W') player = 'B', OP = 'W';
- else player = 'W', OP = 'B';
- }
- bool judgePlayAtSite(int n, int m)
- {
- bool flag = false;
- int x, y;
- for (int i = ; i < ; i++) //循环8个方向
- {
- x = n, y = m;
- if ((x + x_dir[i]) >= && (x + x_dir[i]) <= && (y + y_dir[i]) >= && (y + y_dir[i]) <= && QP[x + x_dir[i]][y + y_dir[i]] == '-')
- {
- while (QP[x][y] == OP&&x <= && x >= && y <= && y >= )
- x -= x_dir[i],y -= y_dir[i];
- if (x <= && x >= && y <= && y >= && QP[x][y] == player) //位置合理 落子合理
- Oper[(n + x_dir[i]) * + m + y_dir[i]] = true,flag = true;
- }
- }
- return flag;
- }
- void dealAllOP(int n, int m)
- {
- int x, y;
- for (int i = ; i < ; i++)
- {
- x = n + x_dir[i], y = m + y_dir[i];
- if (x >= && x <= && y >= && y <= && QP[x][y] == OP)
- {
- while (QP[x][y] == OP&&x >= && x <= && y >= && y <= )
- x += x_dir[i],y += y_dir[i];
- if (x >= && x <= && y >= && y <= && QP[x][y] == player) //对面也是自己棋子,成功夹住,可以吞噬
- {
- x = n + x_dir[i], y = m + y_dir[i];
- while (x >= && x <= && y >= && y <= && QP[x][y] != '-')
- QP[x][y] = player,x += x_dir[i],y += y_dir[i];
- }
- }
- }
- }
- bool judgeRunPlayer()
- {
- bool flag = false;
- memset(Oper, false, sizeof(Oper));
- for (int i = ; i <= N; i++)
- {
- for (int j = ; j <= N; j++)
- if (QP[i][j] == OP) //判断四周是否可以落子
- if (judgePlayAtSite(i, j)) flag = true;
- }
- if (flag == false) ExchangePlayer();
- return flag;
- }
- void dealCommand()
- {
- char comm;
- int x, y, temp;
- while ()
- {
- scanf("%c", &comm);
- switch (comm)
- {
- case 'M': //落子
- scanf("%d", &temp);
- x = temp / , y = temp % ;
- QP[x][y] = player;
- dealAllOP(x, y);
- ExchangePlayer();
- printNumber(); //输出棋盘棋子数
- break;
- case 'L': //提示信息
- if (judgeRunPlayer()) printDataOper();//打印数据
- else printf("No legal move.\n");
- break;
- case 'Q': //退出游戏、打印棋盘
- showQPInfo();
- printf("\n");
- getchar();
- return;
- }
- getchar();
- }
- }
- void main()
- {
- FILE* fp = freopen("data3.in", "r", stdin);
- freopen("data3.out", "w", stdout);
- int num;
- scanf("%d", &num);
- getchar();
- while (num--)
- {
- getQPInfo();
- dealCommand();
- }
- freopen("CON", "r", stdin);
- freopen("CON", "w", stdout);
- }
没必要看
算法习题---4-3黑白棋(UVa220)的更多相关文章
- 51nod 1368:黑白棋 二分图最大匹配
1368 黑白棋 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 取消关注 有一个N*M的棋盘(1<=N,M< ...
- 用Dart写的黑白棋游戏
2013年11月,Dart语言1.0稳定版SDK发布,普天同庆.从此,网页编程不再纠结了. 在我看来,Dart语法简直就是C#的升级版,太像了.之所以喜欢Ruby的一个重要理由是支持mixin功能,而 ...
- [CareerCup] 8.8 Othello Game 黑白棋游戏
8.8 Othello is played as follows: Each Othello piece is white on one side and black on the other. Wh ...
- 黑白棋游戏 (codevs 2743)题解
[问题描述] 黑白棋游戏的棋盘由4×4方格阵列构成.棋盘的每一方格中放有1枚棋子,共有8枚白棋子和8枚黑棋子.这16枚棋子的每一种放置方案都构成一个游戏状态.在棋盘上拥有1条公共边的2个方格称为相邻方 ...
- bzoj 2281 [Sdoi2011]黑白棋(博弈+组合计数)
黑白棋(game) [问题描述] 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色 ...
- C#黑白棋制作~
前些天自己复习一下C#语言 做了个黑白棋,望大家看一下,可能有些bug嘿嘿 链接如下 http://files.cnblogs.com/files/flyingjun/%E9%BB%91%E7%99% ...
- 【BZOJ2281】【博弈论+DP】 [Sdoi2011]黑白棋
Description 黑白棋(game) [问题描述] 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是 ...
- [SDOI2011]黑白棋
Description 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同. 小 ...
- C++ 黑白棋AI minimax+alphabeta剪枝
没事写着玩玩,通过debian上的黑白棋测试,搜了10层,打hard应该问题不大 #include <cstdio> #include <cstring> using name ...
- 【算法习题】数组中任意2个(3个)数的和为sum的组合
题1.给定一个int数组,一个数sum,求数组中和为sum的任意2个数的组合 @Test public void test_find2() { int[] arr = { -1, 0, 2, 3, 4 ...
随机推荐
- PowerMockito单元测试中的Invalid use of argument matchers问题详解
首先,简单说说PowerMockito进行单元测试的三部曲: 打桩,即为非测试目标方法设置返回值,这些返回值在测试目标方法中被使用.执行测试,调用测试目标方法.验证测试结果,如测试方法是否被执行,测试 ...
- linux网络编程之socket编程(九)
转眼又快到十一月份了,北京已经是完全进入冬天的节奏,外面冷风嗖嗖的,不过在夜深人静之时,学习永远成了我最快乐的时光,只有此时会觉得自己是如此踏实,虽说白天工作也是编一天程,但是此时的编程,是一种业余爱 ...
- sudo 以管理员身份运行脚本--tee方式记录脚本日志
说明:当运行脚本时,常遇到权限不足等,可以用以上方法来以管理员权限运行 1.编辑/etc/sudoers (注意,这里使用 visudo 而不是 vi 来设置.) 2.visudo或 给与/etc/s ...
- Ajax使用方法
什么是AJAX? AJAX,Asynchronous JavaScript and XML (异步的JavaScript和XML),一种创建交互式网页应用的网页开发技术方案. 异步的JavaScrip ...
- js中的数据类型以及转换
Js中的数据类型 Js中的数据类型一共有六种,即number,string,boolean,underfine,null,object. 一,number Number数据类型指的是数字,可以为整型, ...
- 块状链表 bzoj 3343教主的魔法
//块状链表//分块排序,然后每次查找时在暴力查找头和尾两个块.//中间那些块,因为有序所以只需2分查找即可.我用的是lower_pound();//插入是,也是头和尾暴力插入,中间那些加到一个累计里 ...
- Bzoj 1280: Emmy卖猪pigs
1280: Emmy卖猪pigs Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 279 Solved: 182[Submit][Status][Dis ...
- TensorFlow(六):tensorboard网络结构
# MNIST数据集 手写数字 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # ...
- requests记录
http://docs.python-requests.org/zh_CN/latest/user/quickstart.html r = requests.get('http://httpbin.o ...
- Beyond compare4密钥
w4G-in5u3SH75RoB3VZIX8htiZgw4ELilwvPcHAIQWfwfXv5n0IHDp5hv1BM3+H1XygMtiE0-JBgacjE9tz33sIh542EmsGs1yg6 ...