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

fanhq666的博客

Fan-Fun

 
 
 

日志

 
 

我的第一个fourcolors程序  

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

  下载LOFTER 我的照片书  |
//这个程序使用最朴素的贪心法,仅仅是为了测试程序框架。
#include <cstdio>
using namespace std;
enum regtype{
land,
sea,
mountain
};
struct edge{
int e;
edge *next;
}_mem[10000];
struct region{
regtype type;
int belongs;//0 and 2 stands for me
int area;
edge *nei;
}R[60];
int U,V,W,N;
int legal(int where,int who){
if (where<0 || where>=N)return 0;
if (R[where].belongs!=-1 || R[where].type!=land)return 0;
for (edge *p=R[where].nei;p;p=p->next){
if (R[p->e].belongs==who)return 0;
}
return 1;
}
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 (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;
R[i].belongs=-1;
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){
R[u].belongs=turn;
player.put(u,turn);
}
turn++;turn&=3;
player.play(u,turn);
if (u!=-1 && legal(u,turn)){
R[u].belongs=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 (legal(i,0) || legal(i,2)){
flg=1;break;
}
}
if (!flg)break;
}
return 0;
}
  评论这张
 
阅读(435)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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