A Chess Game

15 篇文章 0 订阅

http://poj.org/problem?id=2425

// File Name: poj2425.cpp
// Author: bo_jwolf
// Created Time: 2013年10月06日 星期日 16:06:50

#include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>

using namespace std;
const int maxn = 1005;
int n, m, temp, sg[ maxn ];
vector<vector<int> >Q;

int getSg( int n ){
	if( sg[ n ] != -1 )
		return sg[ n ];
	int vis[ maxn ] = { 0 };
	for( int i = 0; i < Q[ n ].size(); ++i ){
		if( sg[ Q[ n ][ i ] ] == -1 ){
			sg[ Q[ n ][ i ] ] = getSg( Q[ n ][ i ] );
		}
		vis[ sg[ Q[ n ][ i ] ] ] = 1;
	}
	for( int i = 0; ; ++i ){
		if( !vis[ i ] )
			return i;
	}
	return 0;
}

int main(){
	while( scanf( "%d", &n ) != EOF ){
		Q.clear();
		Q.resize( n + 1 );
		memset( sg, -1, sizeof( sg ) );
		for( int i = 0; i < n; ++i ){
			scanf( "%d", &m );
			while( m-- ){
				scanf( "%d", &temp );
				Q[ i ].push_back( temp );
			}
		}
		while( scanf( "%d", &m ) != EOF && m ){
			int ans = 0;
			while( m-- ){
				scanf( "%d", &temp );
				ans ^= getSg( temp );
			}
			if( ans )
				printf( "WIN\n" );
			else
				printf( "LOSE\n" );
		}
	}
return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,请看下面修改后的代码: ```python from tkinter import * import tkinter.messagebox class ChessBoard: def __init__(self, master=None): self.master = master self.master.title('五子棋') self.master.geometry('450x450') self.color = ['black', 'white'] self.chess_color = 0 self.chessboard = Canvas(self.master, width=450, height=450, bg='#F5DEB3') self.chessboard.pack() for i in range(15): self.chessboard.create_line(15 + 30 * i, 15, 15 + 30 * i, 435, width=2) self.chessboard.create_line(15, 15 + 30 * i, 435, 15 + 30 * i, width=2) self.chessboard.bind('<Button-1>', self.chess_board_click) self.chess = {} self.over = False def chess_board_click(self, event): if self.over: return x, y = event.x, event.y col, row = x // 30, y // 30 if (col, row) in self.chess: return self.draw_chess(col, row) def draw_chess(self, col, row): if self.over: return x, y = 15 + col * 30, 15 + row * 30 color = self.color[self.chess_color] self.chessboard.create_oval(x - 13, y - 13, x + 13, y + 13, fill=color) self.chess[(col, row)] = color self.check_game_over(col, row) self.chess_color = 1 - self.chess_color def check_game_over(self, col, row): directions = [(0, 1), (1, 0), (1, 1), (1, -1)] for direction in directions: count = 1 for i in range(1, 5): col_i, row_i = col + i * direction[0], row + i * direction[1] if (col_i, row_i) in self.chess and self.chess[(col_i, row_i)] == self.color[self.chess_color]: count += 1 else: break for i in range(1, 5): col_i, row_i = col - i * direction[0], row - i * direction[1] if (col_i, row_i) in self.chess and self.chess[(col_i, row_i)] == self.color[self.chess_color]: count += 1 else: break if count >= 5: self.game_over() def game_over(self): self.over = True color = self.color[self.chess_color] tkinter.messagebox.showinfo('五子棋', f'{color}方胜!') if __name__ == '__main__': root = Tk() ChessBoard(root) root.mainloop() ``` 主要的修改如下: 1. 第 65 行的缩进问题已经解决。 2. 第 66 行的 `break` 语句需要放在一个循环中,因此我将其放在了两个 `for` 循环中的一个内部循环中。 希望这次修改能够解决你的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值