Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
为什么我的代码TLE啊 ??我是两次DFS+一次BFS#include<stdio.h> #include<queue> using namespace std; char map[45][45]; int ii,jj,ans,si,sj,ei,ej; int get(int i,int j) { if(i==0) return 3; if(i==(ii-1)) return 1; if(j==0) return 2; return 4; } int ok(int nowi,int nowj) { if(nowi<0||nowi>=ii||nowj<0||nowj>=jj) return 0; return 1; } void dfs(int nowi,int nowj,int d) { if(!ok(nowi,nowj)||(si==nowi&&sj==nowj&&ans!=0)) return ; ans++; if(nowi==ei&&nowj==ej) return ; if(d==1) { if(ok(nowi,nowj-1)&&map[nowi][nowj-1]=='.')//face 1 dfs(nowi,nowj-1,4); else if(ok(nowi-1,nowj)&&map[nowi-1][nowj]=='.') dfs(nowi-1,nowj,1); else if(ok(nowi,nowj+1)&&map[nowi][nowj+1]=='.') dfs(nowi,nowj+1,2); else if(ok(nowi+1,nowj)&&map[nowi+1][nowj]=='.') dfs(nowi+1,nowj,3); } if(d==2) { if(ok(nowi-1,nowj)&&map[nowi-1][nowj]=='.') dfs(nowi-1,nowj,1); else if(ok(nowi,nowj+1)&&map[nowi][nowj+1]=='.') dfs(nowi,nowj+1,2); else if(ok(nowi+1,nowj)&&map[nowi+1][nowj]=='.') dfs(nowi+1,nowj,3); else if(ok(nowi,nowj-1)&&map[nowi][nowj-1]=='.')//face 1 dfs(nowi,nowj-1,4); } if(d==3) { if(ok(nowi,nowj+1)&&map[nowi][nowj+1]=='.') dfs(nowi,nowj+1,2); else if(ok(nowi+1,nowj)&&map[nowi+1][nowj]=='.') dfs(nowi+1,nowj,3); else if(ok(nowi,nowj-1)&&map[nowi][nowj-1]=='.')//face 1 dfs(nowi,nowj-1,4); else if(ok(nowi-1,nowj)&&map[nowi-1][nowj]=='.') dfs(nowi-1,nowj,1); } if(d==4) { if(ok(nowi+1,nowj)&&map[nowi+1][nowj]=='.') dfs(nowi+1,nowj,3); else if(ok(nowi,nowj-1)&&map[nowi][nowj-1]=='.')//face 1 dfs(nowi,nowj-1,4); else if(ok(nowi-1,nowj)&&map[nowi-1][nowj]=='.') dfs(nowi-1,nowj,1); else if(ok(nowi,nowj+1)&&map[nowi][nowj+1]=='.') dfs(nowi,nowj+1,2); } return ; } void dfs1(int nowi,int nowj,int d) { if(!ok(nowi,nowj)||(si==nowi&&sj==nowj&&ans!=0)) return ; ans++; if(nowi==ei&&nowj==ej) return ; if(d==1) { if(ok(nowi,nowj+1)&&map[nowi][nowj+1]=='.') dfs1(nowi,nowj+1,2); else if(ok(nowi-1,nowj)&&map[nowi-1][nowj]=='.') dfs1(nowi-1,nowj,1); else if(ok(nowi,nowj-1)&&map[nowi][nowj-1]=='.')//face 1 dfs1(nowi,nowj-1,4); else if(ok(nowi+1,nowj)&&map[nowi+1][nowj]=='.') dfs1(nowi+1,nowj,3); } if(d==2) { if(ok(nowi+1,nowj)&&map[nowi+1][nowj]=='.') dfs1(nowi+1,nowj,3); else if(ok(nowi,nowj+1)&&map[nowi][nowj+1]=='.') dfs1(nowi,nowj+1,2); else if(ok(nowi-1,nowj)&&map[nowi-1][nowj]=='.') dfs1(nowi-1,nowj,1); else if(ok(nowi,nowj-1)&&map[nowi][nowj-1]=='.')//face 1 dfs1(nowi,nowj-1,4); } if(d==3) { if(ok(nowi,nowj-1)&&map[nowi][nowj-1]=='.')//face 1 dfs1(nowi,nowj-1,4); else if(ok(nowi+1,nowj)&&map[nowi+1][nowj]=='.') dfs1(nowi+1,nowj,3); else if(ok(nowi,nowj+1)&&map[nowi][nowj+1]=='.') dfs1(nowi,nowj+1,2); else if(ok(nowi-1,nowj)&&map[nowi-1][nowj]=='.') dfs1(nowi-1,nowj,1); } if(d==4) { if(ok(nowi-1,nowj)&&map[nowi-1][nowj]=='.') dfs1(nowi-1,nowj,1); else if(ok(nowi,nowj-1)&&map[nowi][nowj-1]=='.')//face 1 dfs1(nowi,nowj-1,4); else if(ok(nowi+1,nowj)&&map[nowi+1][nowj]=='.') dfs1(nowi+1,nowj,3); else if(ok(nowi,nowj+1)&&map[nowi][nowj+1]=='.') dfs1(nowi,nowj+1,2); } } int movei[4]={-1,0,1,0}; int movej[4]={0,1,0,-1}; void bfs(int nowi,int nowj) { queue<int> i; queue<int> j; int p,num=0,end=1;; i.push(nowi); j.push(nowj); while(true) { ans++; p=0; while(p<end) { nowi=i.front(); nowj=j.front(); i.pop(); j.pop(); for(int t=0;t<4;t++) { int iii=nowi+movei[t]; int jjj=nowj+movej[t]; if(ok(iii,jjj)&&map[iii][jjj]=='.') { if(iii==ei&&jjj==ej) goto tt; i.push(iii); j.push(jjj); num++; } } map[nowi][nowj]='#'; p++; } end=num; num=0; } tt:; ans++; } int main() { int ncase,i,j; scanf("%d",&ncase); while(ncase--) { scanf("%d%d",&jj,&ii); for(i=0;i<ii;i++) { scanf("%s",map[i]); for(j=0;j<jj;j++) { if(map[i][j]=='S') { si=i; sj=j; } if(map[i][j]=='E') { ei=i; ej=j; map[i][j]='.'; } } } ans=0; dfs(si,sj,get(si,sj)); printf("%d ",ans); ans=0; dfs1(si,sj,get(si,sj)); printf("%d ",ans); ans=0; bfs(si,sj); printf("%d\n",ans); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator