程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 5970 格子游戲,5970格子

5970 格子游戲,5970格子

編輯:C++入門知識

5970 格子游戲,5970格子


題目描述 Description

Alice和Bob玩了一個古老的游戲:首先畫一個n * n的點陣(下圖n = 3)   接著,他們兩個輪流在相鄰的點之間畫上紅邊和藍邊:
直到圍成一個封閉的圈(面積不必為1)為止,“封圈”的那個人就是贏家。因為棋盤實在是太大了(n <= 200),他們的游戲實在是太長了!他們甚至在游戲中都不知道誰贏得了游戲。於是請你寫一個程序,幫助他們計算他們是否結束了游戲?

輸入描述 Input Description

輸入數據第一行為兩個整數n和m。m表示一共畫了m條線。以後m行,每行首先有兩個數字(x, y),代表了畫線的起點坐標,接著用空格隔開一個字符,假如字符是"D ",則是向下連一條邊,如果是"R "就是向右連一條邊。輸入數據不會有重復的邊且保證正確。

輸出描述 Output Description

輸出一行:在第幾步的時候結束。假如m步之後也沒有結束,則輸出一行“draw”

樣例輸入 Sample Input

3 5
1 1 D
1 1 R
1 2 D
2 1 R
2 2 D

樣例輸出 Sample Output

4

數據范圍及提示 Data Size & Hint

n <= 200

分類標簽 Tags 點此展開

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int map[1001][1001];
 5 int now=1;
 6 int f[1000001];
 7 int find(int x)
 8 {
 9     if(f[x]!=x)
10     f[x]=find(f[x]);
11     return f[x];
12 }
13 void unionn(int r1,int r2)
14 {
15     f[r2]=r1;
16 }
17 int main()
18 {
19     int ans;
20     int flag=0;
21     int n,m;
22     int x1,y1;
23     int x2,y2;
24     char z;
25     cin>>n>>m;
26     for(int i=1;i<=n;i++)
27     for(int j=1;j<=n;j++)
28     {
29         map[i][j]=now;
30         now++;
31     }
32     for(int i=1;i<=n*n+20;i++)
33     f[i]=i;
34     
35     //scanf("%d%d",&n,&m);
36     for(int i=1;i<=m;i++)
37     {
38             cin>>x1>>y1;
39             cin>>z; 
40             if(z=='D')
41             {
42                 x2=x1+1;
43                 y2=y1;
44             }
45             else 
46             {
47                 x2=x1;
48                 y2=y1+1;
49             }
50             int r1=find(map[x1][y1]);
51             int r2=find(map[x2][y2]);
52             if(r1!=r2)
53             unionn(r1,r2);
54             else
55             {
56                 flag=1;
57                 ans=i;
58                 break;
59             }
60             
61     }
62     if(flag==1)
63     cout<<ans<<endl;
64     else
65     {
66         cout<<"draw";
67     }
68     return 0;
69 } 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved