首页 > 其他分享 >ACM预备队week4(搜索)

ACM预备队week4(搜索)

时间:2022-11-16 17:02:43浏览次数:87  
标签:sy sx int ACM 预备队 bfs && 5d week4

1.迷宫

题目链接:P1605 迷宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

dfs

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int sx,sy,fx,fy;
 4 int n,m,t;
 5 const int N=10;
 6 int p[N][N];//地图
 7 int st[N][N];//起标记作用
 8 int ans;
 9 void dfs(int sx,int sy)
10 {
11     if(sx==fx&&sy==fy)
12     {
13         ans++;
14         return;
15     }
16     st[sx][sy]=1;
17     int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
18     for(int i=0;i<4;i++)
19     {
20         int x=sx+dx[i],y=sy+dy[i];
21         if(x>=1&&x<=m&&y>=1&&y<=n&&!st[x][y]&&!p[x][y])
22         {
23             st[x][y]=1;
24             p[x][y]=1;
25             dfs(x,y);
26             st[x][y]=0;
27             p[x][y]=0;
28         }
29     }
30 }
31 int main()
32 {
33     cin>>n>>m>>t;
34     cin>>sx>>sy>>fx>>fy;
35     for(int i=0;i<t;i++)
36     {
37         int x,y;
38         cin>>x>>y;
39         p[x][y]=1;
40     }
41     dfs(sx,sy);
42     cout<<ans;
43 }

2.马的遍历

题目链接:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

 

bfs,但是要注意象棋中马如何行走的

ps:

(1)%5d是将数字按宽度为5,采用右对齐方式输出,若数据位数不到5位,则左边补空格

(2)%-5d就是左对齐

(3)%05d,和%5d差不多,只不过左边补0

(4)%.5d从执行效果来看,和%05d一样

 

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef pair<int,int> PII;
 4 const int N=500;
 5 int d[N][N];//表示距离,所以初始化都为-1 
 6 int n,m,sx,sy;
 7 void bfs()
 8 {
 9     queue<PII> q;
10     q.push({sx,sy});
11     
12     d[sx][sy]=0;
13     int dx[]={1,1,-1,-1,2,2,-2,-2},dy[]={2,-2,2,-2,1,-1,1,-1};
14     while(q.size())
15     {
16         auto t=q.front();
17         q.pop();
18         for(int i=0;i<8;i++)
19         {
20             int x=t.first+dx[i],y=t.second+dy[i];
21             if(d[x][y]==-1&&x>=1&&x<=n&&y>=1&&y<=m)
22             {
23                 d[x][y]=d[t.first][t.second]+1;
24                 q.push({x,y});
25             }
26         }
27     }
28 }
29 int main()
30 {
31     ios::sync_with_stdio(false);
32     cin.tie(0),cout.tie(0);
33     cin>>n>>m>>sx>>sy;
34     memset(d,-1,sizeof d);
35     bfs();
36     for(int i=1;i<=n;i++){
37         for(int j=1;j<=m;j++)cout<<left<<setw(5)<<d[i][j];//或者printf("%-5d",d[i][j]);
38         printf("\n");
39     }
40     return 0;
41 }

 

标签:sy,sx,int,ACM,预备队,bfs,&&,5d,week4
From: https://www.cnblogs.com/Zac-saodiseng/p/16896499.html

相关文章