日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ-1414 Life Line (暴力搜索)

發布時間:2025/3/13 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ-1414 Life Line (暴力搜索) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Life Line
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 855 Accepted: 623
Description

Let’s play a new board game “Life Line”.
The number of the players is greater than 1 and less than 10.
In this game, the board is a regular triangle in which many small regular triangles are arranged (See Figure 1). The edges of each small triangle are of the same length.

The size of the board is expressed by the number of vertices on the bottom edge of the outer triangle.For example, the size of the board in Figure 1 is 4.

At the beginning of the game, each player is assigned his own identification number between 1 and 9,and is given some stones on which his identification number is written.

Each player puts his stone in turn on one of the “empty” vertices. An “empty vertex” is a vertex that has no stone on it.

When one player puts his stone on one of the vertices during his turn, some stones might be removed from the board. The player gains points which is equal to the number of the removed stones of himself. The points of a player for a single turn is the points he gained minus the points he lost in that turn.

The conditions for removing stones are as follows :

1.The stones on the board are divided into groups. Each group contains a set of stones whose numbersare the same and placed adjacently. That is, if the same numbered stones are placed adjacently,they belong to the same group.

2.If none of the stones in a group is adjacent to at least one “empty” vertex, all the stones in that group are removed from the board.

Figure 2 shows an example of the groups of stones.

Suppose that the turn of the player ‘4’ comes now. If he puts his stone on the vertex shown in Figure 3a, the conditions will be satisfied to remove some groups of stones (shadowed in Figure 3b). The player gains 6 points, because the 6 stones of others are removed from the board (See Figure 3c).

As another example, suppose that the turn of the player ‘2’ comes in Figure 2. If the player puts his

stone on the vertex shown in Figure 4a, the conditions will be satisfied to remove some groups of stones (shadowed in Figure 4b). The player gains 4 points, because the 4 stones of others are removed. But, at the same time, he loses 3 points, because his 3 stones are removed. As the result, the player’s points of this turn is 4 ? 3 = 1 (See Figure 4c).

When each player puts all of his stones on the board, the game is over. The total score of a player is the summation of the points of all of his turns.

Your job is to write a program that tells you the maximum points a player can get (i.e., the points he gains - the points he loses) in his current turn.

Input

The input consists of multiple data. Each data represents the state of the board of the game still in

progress. The format of each data is as follows.

N C
S1,1
S2,1 S2,2
S3,1 S3,2 S3,3

SN,1 … SN,N

N is the size of the board (3 <= N <= 10). C is the identification number of the player whose turn comes now (1 <= C <= 9). That is, your program must calculate his points in this turn. Si,j is the state of the vertex on the board (0 <= Si,j <= 9). If the value of Si,j is positive, it means that there is the stone numbered by Si,j there. If the value of Si,j is 0, it means that the vertex is “empty”. Two zeros in a line, i.e., 0 0, represents the end of the input.
Output

For each data, the maximum points the player can get in the turn should be output, each in a separate line.
Sample Input

4 4
2
2 3
1 0 4
1 1 4 0
4 5
2
2 3
3 0 4
1 1 4 0
4 1
2
2 3
3 0 4
1 1 4 0
4 1
1
1 1
1 1 1
1 1 1 0
4 2
1
1 1
1 1 1
1 1 1 0
4 1
0
2 2
5 0 7
0 5 7 0
4 2
0
0 3
1 0 4
0 1 0 4
4 3
0
3 3
3 2 3
0 3 0 3
4 2
0
3 3
3 2 3
0 3 0 3
6 1
1
1 2
1 1 0
6 7 6 8
0 7 6 8 2
6 6 7 2 2 0
5 9
0
0 0
0 0 0
0 0 0 0
0 0 0 0 0
5 3
3
3 2
4 3 2
4 4 0 3
3 3 3 0 3
0 0
Sample Output

6
5
1
-10
8
-1
0
1
-1
5
0
5

題目的意思就是講一個游戲的規則,太長了,看圖就應該明白了。這個題目數據量小,直接暴力搜索就可以了

#include <iostream> #include <string.h> #include <math.h> #include <algorithm> #include <stdlib.h>using namespace std; int n,c; int a[15][15]; int vis[15][15]; int tag; int _count; int num[15]; int dir[6][2]={{-1,0},{-1,-1},{0,-1},{0,1},{1,0},{1,1}}; void dfs(int x,int y,int term) {for(int i=0;i<6;i++){int xx=x+dir[i][0];int yy=y+dir[i][1];if(xx<0||yy<0||xx>n-1||yy>n-1||yy>xx)continue;if(a[xx][yy]!=term&&a[xx][yy]!=0)continue;if(a[xx][yy]==0)tag=1;if(vis[xx][yy])continue;vis[xx][yy]=1;if(a[xx][yy]==term)_count++;dfs(xx,yy,term);} } int sove() {int sum=0;for(int i=0;i<n;i++){for(int j=0;j<=i;j++){if(a[i][j]!=0&&vis[i][j]==0){vis[i][j]=1;tag=0;_count=1;dfs(i,j,a[i][j]);if(tag==0&&a[i][j]!=c)sum+=_count;if(tag==0&&a[i][j]==c)sum-=_count;}}}return sum; }int main() {int ans;while(scanf("%d%d",&n,&c)!=EOF){if(n==0&&c==0)break;ans=-9999999;memset(vis,0,sizeof(vis));for(int i=0;i<n;i++){for(int j=0;j<=i;j++){scanf("%d",&a[i][j]);num[a[i][j]]++;}}for(int i=0;i<n;i++){for(int j=0;j<=i;j++){if(a[i][j]==0){a[i][j]=c;num[c]++;memset(vis,0,sizeof(vis));int tmp=sove();if(ans<tmp)ans=tmp;a[i][j]=0;num[c]--;}}}printf("%d\n",ans);}return 0; }

轉載于:https://www.cnblogs.com/dacc123/p/8228841.html

總結

以上是生活随笔為你收集整理的POJ-1414 Life Line (暴力搜索)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。