栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1872 A Dicey Problem

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1872 A Dicey Problem

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define MAXN 1000000struct node{    int x,y;    int up,to;}q[MAXN],st;int fa[MAXN];bool vis[11][11][7][7];int map[11][11];int dir[7][7][4];int dx[]={-1,1,0,0};int dy[]={0,0,-1,1};int right[7][7];int n,m;bool isok(int up,int x,int y){    if(!(x>=1&&x<=n&&y>=1&&y<=m&&map[x][y])) return false;    if(map[x][y]==-1) return true;    if(map[x][y]!=up) return false;    return true;}void change(node &tt,int d){    if(d==0)    {        int tmp=tt.up;        tt.up=tt.to;        tt.to=7-tmp;    }    else if(d==1)    {        int tmp=tt.to;        tt.to=tt.up;        tt.up=7-tmp;    }    else if(d==2)    {        tt.up=right[tt.up][tt.to];    }    else if(d==3)    {        tt.up=7-right[tt.up][tt.to];    }}int num;void print(int k){    if(k==0) return;    print(fa[k]);    num++;    if(num!=9) printf(",(%d,%d)",q[k].x,q[k].y);    else   {printf(",n  (%d,%d)",q[k].x,q[k].y);num=0;}}void bfs(){    int rear=0,front=0;    node tmp,tt;    fa[0]=-1;    q[rear++]=st;    while(front<rear)    {        tmp=q[front];        for(int i=0;i<4;i++)        { int nx=tmp.x+dx[i]; int ny=tmp.y+dy[i]; if(isok(tmp.up,nx,ny)) {     tt=tmp;     tt.x=nx;     tt.y=ny;     change(tt,i);     if(!vis[tt.x][tt.y][tt.up][tt.to])     {         fa[rear]=front;         q[rear++]=tt;         if(tt.x==st.x&&tt.y==st.y)         {  printf("  (%d,%d)",st.x,st.y);  print(rear-1);  putchar(10);  return;         }         vis[tt.x][tt.y][tt.up][tt.to]=1;     } }        }        front++;    }    printf("  No Solution Possiblen");}int main(){    right[1][2]=3;right[1][3]=5;right[1][4]=2;right[1][5]=4;    right[2][1]=4;right[2][3]=1;right[2][6]=3;right[2][4]=6;    right[3][1]=2;right[3][5]=1;right[3][6]=5;right[3][2]=6;    right[4][1]=5;right[4][2]=1;right[4][6]=2;right[4][5]=6;    right[5][1]=3;right[5][4]=1;right[5][6]=4;right[5][3]=6;    right[6][2]=4;right[6][3]=2;right[6][5]=3;right[6][4]=5;    char name[50];    while(scanf("%s",&name)&&strcmp(name,"END")!=0)    {        num=0;        scanf("%d%d%d%d%d%d",&n,&m,&st.x,&st.y,&st.up,&st.to);        for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) {     scanf("%d",&map[i][j]); }        memset(vis,0,sizeof(vis));        puts(name);        bfs();    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378574.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号