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