标签:stand can div ota oar spec standard iss 内存
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4368 Accepted Submission(s): 1324
1 /* 2 用bool开一个8维数组vis记录状态是否走过,很容易超内存,尽量少开数组减少内存。 3 */ 4 #include<iostream> 5 #include<cstring> 6 #include<queue> 7 using namespace std; 8 bool vis[8][8][8][8][8][8][8][8]; 9 bool mp[8][8]; 10 int dir[4][2]={1,0,0,1,-1,0,0,-1}; 11 struct Lu 12 { 13 int x[4],y[4],cnt; 14 }L3; 15 bool chak(Lu L) 16 { 17 for(int i=0;i<4;i++){ 18 if(!mp[L.x[i]][L.y[i]]) 19 return 0; 20 } 21 return 1; 22 } 23 bool nice(Lu L) 24 { 25 for(int i=0;i<4;i++){ 26 if(L.x[i]>7||L.x[i]<0||L.y[i]>7||L.y[i]<0) 27 return 0; 28 } 29 if(vis[L.x[1]][L.y[1]][L.x[2]][L.y[2]][L.x[3]][L.y[3]][L.x[4]][L.y[4]]) 30 return 0; 31 return 1; 32 } 33 bool empt(Lu L,int k) 34 { 35 for(int i=0;i<4;i++){ 36 if(i==k) continue; 37 if(L.x[k]==L.x[i]&&L.y[k]==L.y[i]) 38 return 0; 39 } 40 return 1; 41 } 42 bool bfs() 43 { 44 Lu L2; 45 queue<Lu>q; 46 q.push(L3); 47 while(!q.empty()){ 48 L2=q.front(); 49 q.pop(); 50 if(chak(L2)) return 1; 51 if(L2.cnt>=8) continue; 52 for(int i=0;i<4;i++){ 53 for(int j=0;j<4;j++){ 54 L3=L2; 55 L3.x[i]=L2.x[i]+dir[j][0]; 56 L3.y[i]=L2.y[i]+dir[j][1]; 57 if(!nice(L3)) continue; 58 if(empt(L3,i)){ 59 vis[L3.x[1]][L3.y[1]][L3.x[2]][L3.y[2]][L3.x[3]][L3.y[3]][L3.x[4]][L3.y[4]]=true; 60 L3.cnt++; 61 q.push(L3); 62 } 63 else{ 64 L3.x[i]=L3.x[i]+dir[j][0]; 65 L3.y[i]=L3.y[i]+dir[j][1]; 66 if(!nice(L3)) continue; 67 if(empt(L3,i)){ 68 vis[L3.x[1]][L3.y[1]][L3.x[2]][L3.y[2]][L3.x[3]][L3.y[3]][L3.x[4]][L3.y[4]]=true; 69 L3.cnt++; 70 q.push(L3); 71 } 72 } 73 } 74 } 75 } 76 return 0; 77 } 78 int main() 79 { 80 int x,y; 81 while(cin>>x>>y){ 82 x--;y--; 83 memset(vis,false,sizeof(vis)); 84 memset(mp,false,sizeof(mp)); 85 L3.x[0]=x;L3.y[0]=y; 86 for(int i=1;i<4;i++){ 87 cin>>x>>y; 88 x--;y--; 89 L3.x[i]=x;L3.y[i]=y; 90 } 91 vis[L3.x[1]][L3.y[1]][L3.x[2]][L3.y[2]][L3.x[3]][L3.y[3]][L3.x[4]][L3.y[4]]=true; 92 for(int i=0;i<4;i++){ 93 cin>>x>>y; 94 x--;y--; 95 mp[x][y]=true; 96 } 97 L3.cnt=0; 98 int flag=bfs(); 99 if(flag) cout<<"YES\n"; 100 else cout<<"NO\n"; 101 } 102 return 0; 103 }
标签:stand can div ota oar spec standard iss 内存
原文地址:http://www.cnblogs.com/--ZHIYUAN/p/6227435.html