注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

fanhq666的博客

Fan-Fun

 
 
 

日志

 
 

Fourcolors:一个基本的框架  

2010-07-19 21:32:00|  分类: 程序 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
//这是我写的一个基本框架。后续开发只要补全player这个类即可。
//下载地址:http://cid-354ed8646264d3c4.office.live.com/self.aspx/.Public/Fourcolors/fourcolors^_basicframe.cpp
#include <cstdio>
using namespace std;
enum regtype{
land,
sea,
mountain
};
struct edge{
int e;
edge *next;
}_mem[10000];
struct region{
regtype type;
int area;
edge *nei;
}R[60];
int U,V,W,N;
struct occasion{
unsigned char own[80];
occasion(){for (int i=0;i<80;i++)own[i]=0xff;}
int legal(int where,int who){
if (where<0 || where>=N)return 0;
if (R[where].type!=land)return 0;
if (own[where]!=0xff)return 0;
for (edge *p=R[where].nei;p;p=p->next)if (R[p->e].type==land && own[p->e]==who)return 0;
return 1;
}
void score(int &s0,int &s1){
s0=s1=0;
for (int i=0;i<N;i++){
if (R[i].type==land || R[i].type==mountain){
if (own[i]==0 || own[i]==2)s0+=R[i].area;
if (own[i]==1 || own[i]==3)s1+=R[i].area;
}else if (R[i].type==sea){
int c0=0,c1=0;
for (edge *p=R[i].nei;p;p=p->next)if (R[p->e].type==land && own[p->e]!=0xff){
if (own[p->e]&1)c1++;
else c0++;
}
if (c0>c1)s0+=R[i].area;
else if (c0<c1)s1+=R[i].area;
}
}
}
void put(int where,int who){
own[where]=who;
for (edge *p=R[where].nei;p;p=p->next){
if (R[p->e].type==mountain)own[p->e]=who;
}
}
}Table;
struct Player{
void put(int where,int who){
return;
}
void greedy(int &where,int who){
where=-1;int best=0;
for (int i=0;i<N;i++)if (Table.legal(i,who) && R[i].area>best)
where=i,best=R[i].area;
}
void play(int &where,int who){
greedy(where,who);
}
}player;
int main()
{
int F;
scanf("%d %d %d %d",&U,&V,&W,&F);
N=U+V+W;
for (int i=0;i<U;i++)R[i].type=land;
for (int i=U;i<U+V;i++)R[i].type=sea;
for (int i=U+V;i<N;i++)R[i].type=mountain;
edge *etop=_mem;
for (int i=0;i<N;i++){
R[i].nei=NULL;
scanf("%d",&R[i].area);
int n;
scanf("%d",&n);
for (int j=0;j<n;j++){
int x;
scanf("%d",&x);x--;
etop->next=R[i].nei;R[i].nei=etop;etop->e=x;
etop++;
}
}
int turn=3;
while (1){
int u;
scanf("%d",&u);u--;
if (u!=-1){
Table.put(u,turn);
player.put(u,turn);
}
turn++;turn&=3;
player.play(u,turn);
if (u!=-1 && Table.legal(u,turn)){
Table.put(u,turn);
printf("%d\n",u+1);
}else printf("0\n");
fflush(stdout);
turn++;turn&=3;
int flg=0;
for (int i=0;i<N;i++){
if (Table.legal(i,0) || Table.legal(i,2)){
flg=1;break;
}
}
if (!flg)break;
}
int s0,s1;
Table.score(s0,s1);
//printf("score=%d %d\n",s0,s1);
return 0;
}
  评论这张
 
阅读(371)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017