範例程式碼 uva141

//uva141
#include <stdio.h>
#include <iostream>
#include <map>

using namespace std;

void rotate(int x[][50], int n) {
   int y[50][50], i, j;
   for(i = 0; i < n; i++)
       for(j = 0; j < n; j++)
           y[j][n - i - 1] = x[i][j];
	   
   for(i = 0; i < n; i++)
       for(j = 0; j < n; j++)
           x[i][j] = y[i][j];
}
int main() {
   int n;
   while(scanf("%d", &n), n) {
       map<string, int> r;
       int m = 2 * n, board[50][50] = {}, x, y;
       int flag = -1, move;
       char cmd[3];
       for(int i = 0; i < m; i++) {
           scanf("%d %d %s", &x, &y, cmd);
           if(flag != -1)  continue;
           x--, y--;
           if(cmd[0] == '+')
               board[x][y] = 1;
           else    
			   board[x][y] = 0;
           string s = "";
           for(int j = 0; j < n; j++)
               for(int k = 0; k < n; k++)
                   s += (board[j][k] + '0');
           if(r[s] == 1) {
               flag = i & 1;
               move = i;
               continue;
           }
           for(int rr = 0; rr < 4; rr++) {
               string s = "";
               for(int j = 0; j < n; j++)
                   for(int k = 0; k < n; k++)
                       s += (board[j][k] + '0');
               r[s] = 1;
               rotate(board, n);
           }
       }
       if(flag == -1)
           puts("Draw");
       else
           printf("Player %d wins on move %d\n", !flag + 1, move + 1);
   }
   return 0;
}