博弈论

来源:互联网 发布:商城数据库 编辑:程序博客网 时间:2024/05/01 21:11
 
#include<iostream>#include<stdio.h>#include<queue>using namespace std;#define MAX 30char map[MAX][MAX];int X,Y;int dir[3][2]={{1,0},{0,1},{1,1}};class Point {public:int x;int y;};queue<Point> Nqueue;queue<Point> Pqueue;int over(Point p){if(p.x<0||p.y<0)return 1;if(p.x>=X||p.y>=Y)return 1;return 0;}int allvisited(){int i,j;for(i=0;i<Y;i++){for(j=0;j<X;j++){if(map[j][i]=='0'){return 0;}}}return 1;}int nextallP(Point p){int i;Point cs;for(i=0;i<3;i++){cs.x=p.x;cs.y=p.y;cs.x-=dir[i][0];cs.y-=dir[i][1];if(!over(cs)&&map[cs.x][cs.y]!='P'){return 0;}}return 1;}void P(){int i;Point cs;while(!Nqueue.empty()){Point p=Nqueue.front();Nqueue.pop();for(i=0;i<3;i++){cs.x=p.x;cs.y=p.y;cs.x+=dir[i][0];cs.y+=dir[i][1];if(!over(cs)&&map[cs.x][cs.y]=='0'){Pqueue.push(cs);map[cs.x][cs.y]='P';}}}}void N(){int i;Point cs;while(!Pqueue.empty()){Point p=Pqueue.front();Pqueue.pop();for(i=0;i<3;i++){cs.x=p.x;cs.y=p.y;cs.x+=dir[i][0];cs.y+=dir[i][1];if(!over(cs)&&map[cs.x][cs.y]=='0'&&nextallP(cs)){Nqueue.push(cs);map[cs.x][cs.y]='N';}}}}int main(){int i,j;while(scanf("%d %d",&X,&Y)==2){//初始化for(i=0;i<MAX;i++){for(j=0;j<MAX;j++){map[i][j]='0';}}//处理Point start;start.x=0;start.y=0;map[0][0]='N';//一定要初始化,不然会死循环。Nqueue.push(start);while(!allvisited()){P();N();}}return 0;}

原创粉丝点击