TLE 广搜40求解答QAQ

P1256 显示图像

顶一波,然而并不知道为什么
by 已注销^6Gv$vkg @ 2018-09-15 13:55:10


``` #include<iostream> #include<cmath> #include<algorithm> #include<cstdio> using namespace std; bool txt[200][200],used[200][200]; int ax[8]={1,1,1,0,0,-1,-1,-1},ans=10000; int ay[8]={1,-1,0,1,-1,0,1,-1};int n,m; void cheak(int x,int y,int l){ if(txt[x][y]==1){ ans=min(ans,l);return; } for(int i=0;i<8;i++){ int nx=x+ax[i]; int ny=y+ay[i]; if(nx>0&&ny>0&&nx<=m&&ny<=n&&used[nx][ny]==0){ used[x][y]=1; cheak(nx,ny,l+(abs(ax[i])+abs(ay[i]))); used[x][y]=0; } } } int main(){ char c; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ cin>>c;txt[j][i]=c-'0'; } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ ans=10000; cheak(j,i,0); cout<<ans<<" "; } cout<<endl; } return 0; } ``` 同问
by Dcue @ 2019-03-02 15:41:34


``` #include<bits/stdc++.h> using namespace std; int n,m; int a[200][200],b[200][200]; bool s[200][200],flag;int p=0; int d[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; struct node { int x,y,time; }; void dfs(int x,int y,int dis) { if(flag==1&&p<dis)return ; if(a[x][y]==1) { p=dis; flag=1; return ; } for(int i=0;i<4;i++) { int tx,ty; tx=x+d[i][0]; ty=y+d[i][1]; if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&s[tx][ty]==0) { s[tx][ty]=1; dfs(tx,ty,dis+1); s[tx][ty]=0; } } } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { scanf("%1d",&a[i][j]); b[i][j]=a[i][j]; if(b[i][j]==1)b[i][j]=0; } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(a[i][j]==0) { /*p=0;flag=0; memset(s,0,sizeof(s)); s[i][j]=1; dfs(i,j,0); b[i][j]=p;*/ flag=0; p=0; memset(s,0,sizeof(s)); s[i][j]=1; queue<node> que; node u; u.x=i,u.y=j,u.time=0; que.push(u); while(!que.empty()) { node v=que.front(); que.pop(); if(a[v.x][v.y]==1) { b[i][j]=v.time; break; } for(int i=0;i<4;i++) { int tx,ty; tx=v.x+d[i][0]; ty=v.y+d[i][1]; if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&s[tx][ty]==0) { s[tx][ty]=1; node f; f.x=tx,f.y=ty,f.time=v.time+1; que.push(f); } } } } } } for(int i=1;i<=n;i++,cout<<endl) for(int j=1;j<=m;j++) cout<<b[i][j]<<" "; return 0; } ``` 同问
by 肖泽源 @ 2019-08-24 20:38:35


```cpp #include <iostream> #include <queue> #include <cstring> using namespace std; int n, m; char mp[200][200]; int maze[200][200]; bool vis[200][200]; int dir[4][2] = {{-1,0},{0,-1},{1,0},{0,1}}; struct node{ int x, y, d; node(int xx, int yy, int dd){ x = xx; y = yy; d = dd; } }; int bfs(int x, int y, int step){ if(mp[x][y] == '1') return 0; vis[x][y] = true; queue<node> q; q.push(node(x, y, 0)); while(!q.empty()){ node now = q.front(); q.pop(); if(mp[now.x][now.y] == '1'){ return now.d; } for(int i = 0; i < 4; i ++){ int tx = now.x + dir[i][0]; int ty = now.y + dir[i][1]; if(tx < 1 || tx > n ||ty < 1 || ty > m) continue; if(!vis[tx][ty]){ q.push(node(tx, ty, now.d + 1)); vis[tx][ty] = true; } } } } int main(){ cin >> n >> m; for(int i = 1; i <= n; i ++) for(int j = 1; j <= m; j ++) cin >> mp[i][j]; for(int i = 1; i <= n; i ++){ for(int j = 1; j <= m; j ++){ int ans = bfs(i, j, 0); maze[i][j] = ans; memset(vis, false, sizeof(vis)); } } for(int i = 1; i <= n; i ++){ for(int j = 1; j <= m; j ++){ cout << maze[i][j] << ' '; } cout << endl; } return 0; } 同问 ```
by Pureqyu @ 2020-04-02 01:14:14


@[高木木](/user/113368) 吸氧
by the_shadow @ 2021-10-24 19:31:56


|