#43820: 腦袋超載找不出問題,求救D:


Ixcy (Ixcy)

學校 : 國立宜蘭高級中學
編號 : 290988
來源 : [36.229.196.65]
最後登入時間 :
2024-11-10 22:42:38
o713. 3. 連鎖反應 -- 2024年10月APCS | From: [36.229.248.113] | 發表日期 : 2024-11-02 21:30

前面四筆測資都輸出了123
剩下的輸出的數字大概會多正解3~20
下面是我的程式
#include <bits/stdc++.h> using namespace std; bool visited[501][501]={0}; int grid[501][501]={0},M,N,many,q; bool bfs(int stx,int sty,int steps){ int a,dx[5]={0,0,1,-1},dy[5]={1,-1,0,0},x,y,tx,ty; queue<pair<pair<int,int>,int>>qu; qu.push({{stx,sty},0}); visited[stx][sty]=1; while(!qu.empty()){ auto [pos,stepn]=qu.front(); x=pos.first,y=pos.second; qu.pop(); if(stepn>=steps) continue; for(a=0;a<=3;a++){ tx=x+dx[a]; ty=y+dy[a]; if(tx>=0&&tx<=M-1&&ty>=0&&ty<=N-1&&grid[tx][ty]!=-1&&visited[tx][ty]!=1){ many++; if(grid[tx][ty]>steps-stepn) {bfs(tx,ty,grid[tx][ty]);grid[tx][ty]=0;} else qu.push({{tx,ty},stepn+1}); visited[tx][ty]=1; } } } if(many>=q) return 1; else return 0; } int main(){ int i,j,starti,startj,low=1,Max=250000,mid; cin>>M>>N>>q; for(i=0;i<M;i++){ for(j=0;j<N;j++){ cin>>grid[i][j]; if(grid[i][j]==-2) {starti=i;startj=j;} } } while(Max>low){ memset(visited,0,sizeof(visited)); many=1; mid=(low+Max)/2; if(bfs(starti,startj,mid)) Max=mid; else low=mid+1; } cout<<low; return 0; }
 
ZeroJudge Forum