POJ 2599 A funny game [DFS博弈]
来源:互联网 发布:淘宝客服需要做什么 编辑:程序博客网 时间:2024/05/21 11:01
题意:给定无向图,两个人依次决定移动位置,若一方无路可走则为输,判断先行者的输赢及赢时第一步的走向(若多路皆可,输出较小的数,注意排序)走过的位置会自动销毁,即记忆化搜索。
思路:DFS记忆化搜索,对访问点排序,bool DFS(int k,bool who,node vis)中k表示要访问的位置编号,who为1表示先行者,0表示次行者,vis记录访问。返回true,先行者赢。
#include <iostream>#include <vector>#include <algorithm>using namespace std;int N,K;vector<int> s[1001];struct node{ bool visit[1002];}vis;bool dfs(int k,int who,struct node vis){ if(vis.visit[k]==true&&who==0) return true; else if(vis.visit[k]==true&&who==1) return false; vis.visit[k]=true; if(s[k].size()==0&&who==1) return true; else if(s[k].size()==0&&who==0) return false; for(int j=0;j<s[k].size();j++){ if(who==0){ if(dfs(s[k][j],1,vis)==true) return true; } else if(who==1){ if(dfs(s[k][j],0,vis)==false) return false; } } if(who==0) return false; else return true;}int main(){ while(scanf("%d%d",&N,&K)!=EOF){ int a,b; for(int i=0;i<N-1;i++){ scanf("%d%d",&a,&b); s[a].push_back(b); s[b].push_back(a); } int land=1122; for(int i=0;i<1002;i++) vis.visit[i]=false; vis.visit[K]=true; sort(s[K].begin(),s[K].end()); for(int j=0;j<s[K].size();j++){ if(dfs(s[K][j],1,vis)==true ){ land=s[K][j]; break; } } if(land==1122) printf("First player loses\n"); else printf("First player wins flying to airport %d\n",land); for(int i=0;i<1001;i++) s[i].clear(); } return 0;}/*测试:Sample Input4 33 2 3 11 4Sample OutputFirst player wins flying to airport 2*/
- POJ 2599 A funny game [DFS博弈]
- POJ 2599 A funny game (搜索,博弈)
- POJ 2599 A funny game(博弈搜索)
- POJ 2484 A Funny Game 简单博弈
- POJ 2484 A Funny Game(博弈)
- POJ 2484-A Funny Game(对称博弈)
- POJ 2488-A Funny Game(简单博弈)
- POJ 2484 A Funny Game【博弈】
- POJ 2484 A Funny Game (博弈)
- POJ 2484A Funny Game【博弈】
- 【POJ 2484】A Funny Game 【简单博弈】
- poj 2484 A Funny Game (博弈)
- 【POJ 2484 A Funny Game】+ 博弈
- POJ 2484 A Funny Game <简单博弈>
- POJ 2599 A funny game
- POJ 2599 A funny game
- poj 2599 A funny game
- [博弈]A Funny Stone Game
- 一段有用的java3d代码,演示了java3d鼠标滑过对象事件。
- Opendiameter
- PS1设置Linux系统提示符
- 编译安装小错误
- 用汇编的眼光看C++(之判断流程)
- POJ 2599 A funny game [DFS博弈]
- JNI中输出debug message
- OpenDiameter 编译,安装,调试
- 时间与金钱
- 用汇编的眼光看C++(之循环流程)
- QwtScaleWidget
- 鼠标点击、拖拽、抬起三态检测virtools原理实现
- 有效的使用和设计COM智能指针——条款21:巧妙的将对象伪装成指针
- 绝对经典sql语句查询分类前几条信息 ,并按某字段排序