zju 2529 DomiNo Grid

来源:互联网 发布:python社交数据可视化 编辑:程序博客网 时间:2024/04/27 15:05



简单提,只有广搜可以过
#include <iostream>
#include 
<string>
#include 
<queue>
using namespace std;
typedef 
struct  
{
    
int x, y;
    
char c;
}
Node;
int m, n;
char a[501][501];
int d[8][3][2= {    
    
{{-1,0},{-1,-1},{-1,1}},//n
    {{-1,1},{-1,0},{0,1}},  //y
    {{0,1},{-1,1},{1,1}},   //e
    {{1,1},{0,1},{1,0}},    //q
    {{1,0},{1,-1},{1,1}},   //s
    {{1,-1},{0,-1},{1,0}},   //j
    {{0,-1},{-1,-1},{1,-1}}//w
    {{-1,-1},{0,-1},{-1,0}}//v    
}
;
char chooseDir(int x, int y)
{
    
if(x==0 && y==-1)
        
return 'W';
    
if(x==-1 && y==-1)
        
return 'V';
    
if(x==-1 && y==0)
        
return 'N';
    
if(x==-1 && y==1)
        
return 'Y';
    
if(x==0 && y==1)
        
return 'E';
    
if(x==1 && y==1)
        
return 'Q';
    
if(x==1 && y==0)
        
return 'S';
    
if(x==1 && y==-1)
        
return 'J';
}


void print()
{
    
int i, j;
    
for (i=0; i<n; ++i)
    
{
        
for (j=0; j<m; ++j)
        
{
            printf(
"%c",a[i][j]);
        }

        printf(
" ");
    }

}

int main()
{
    
    
int i, j;
    
int x, y;
    
char dir;
    
bool flag = false;
    queue
<Node> mq;
    Node st, t, tt;
    
while (scanf("%d%d",&n, &m) != EOF)
    
{    
        
if(!flag)
            flag 
= true;
        
else
            printf(
" ");
        getchar();
        
for (i=0; i<n; ++i)
        
{
            
for (j=0; j<m; ++j)
            
{
                scanf(
"%c",&a[i][j]);
            }

            getchar();
        }

    
//    print();
        scanf("%d %d %c",&x, &y, &dir);
        st.x 
= --x, st.y = --y, st.c = dir;
        a[x][y] 
= dir;
        mq.push(st);
        
while (!mq.empty())
        
{
            t 
= mq.front();
            mq.pop();
            
//a[t.x][t.y] = t.c;
            int index = -1;
            
if(t.c == 'N')
                index 
= 0;
            
if(t.c == 'Y')
                index 
= 1;
            
if(t.c == 'E')
                index 
= 2;
            
if(t.c == 'Q')
                index 
= 3;
            
if(t.c == 'S')
                index 
= 4;
            
if(t.c == 'J')
                index 
= 5;
            
if(t.c == 'W')
                index 
= 6;
            
if(t.c == 'V')
                index 
= 7;
            
int xx, yy;
            
for (int i=0; i<3++i)
            
{
                xx 
= t.x + d[index][i][0];
                yy 
= t.y + d[index][i][1];
                
if(xx>=0&&xx<&& yy>=0&&yy<m)
                
{
                    
if(a[xx][yy]=='X')
                    
{
                        tt.x 
= xx;
                        tt.y 
= yy;
                        tt.c 
= chooseDir(d[index][i][0], d[index][i][1]);
                        a[xx][yy] 
= chooseDir(d[index][i][0], d[index][i][1]);
                        mq.push(tt);
                    }

                }

            }


        }

        print();
        
    }

    
return 0;
}