计蒜客 迷宫

 

 

 

 

 按常规套路得的来,加个传送功能就没了。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char mg[1005][1005];
 4 int vis[1005][1005];
 5 int con[105][4]; 
 6 int min_dis=0x3f3f3f3f;
 7 int yes;
 8 struct node{
 9     int x;
10     int y;
11     int step;
12     node(int x,int y,int step)
13     {
14         this->x=x;
15         this->y=y;
16         this->step=step;
17     }
18 };
19 int n,m,q,tx,ty;
20 int dir[][2]={{0,1},{1,0},{0,-1},{-1,0}};
21 bool judge(int x,int y)
22 {
23     if(x>0&&x<=n&&y>0&&y<=m)
24     {
25         if(mg[x][y]=='.'&&vis[x][y]==0)
26             return true;
27         else
28             return false;
29     }
30     return false;
31 }
32 int main()
33 {
34     cin>>n>>m;
35     for(int i=1;i<=n;++i)
36         for(int j=1;j<=m;++j)
37             cin>>mg[i][j];
38     cin>>q;
39     for(int i=0;i<q;++i)
40         for(int j=0;j<4;++j)
41             cin>>con[i][j]; 
42     cin>>tx>>ty;
43     queue<node> v;
44     v.push(node(1,1,0));
45     vis[1][1]=1;
46     while(!v.empty())
47     {
48         node now =     v.front();
49         int x = now.x;
50         int y=now.y;
51         int flag=0;
52         if(mg[x][y]=='*')
53         {
54             v.pop();
55             continue;
56         }
57         if(x==tx&&y==ty)
58         {
59             if(now.step<min_dis)
60                 min_dis=now.step;
61             vis[x][y]==0;
62             v.pop();
63             yes=1;
64             continue;
65         }
66         for(int i=0;i<q;++i)
67         {
68             if(x==con[i][0]&&y==con[i][1])
69             {    
70                     v.push(node(con[i][2],con[i][3],now.step));
71                     flag=1;
72                     break;
73             }
74         }
75         if(flag==0)
76         {
77             for(int i=0;i<4;++i)
78             {
79                 if(judge(x+dir[i][0],y+dir[i][1]))
80                 {
81                     v.push(node(x+dir[i][0],y+dir[i][1],now.step+1));
82                     vis[x+dir[i][0]][y+dir[i][1]]=1;
83                 }
84             }
85         }
86         v.pop();
87     }
88     if(yes==1)
89     cout<<min_dis<<endl;
90     else
91     cout<<"No solution";
92     return 0;
93 }

 

posted @ 2020-04-16 23:11  caxi  阅读(188)  评论(0编辑  收藏  举报