#18185: c++ AC


089487 (089487)

學校 : 國立臺灣師範大學附屬高級中學
編號 : 82069
來源 : [140.112.150.137]
最後登入時間 :
2024-10-03 16:28:37
a982. 迷宮問題#1 | From: [1.171.52.169] | 發表日期 : 2019-06-25 12:35

#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
int main()
{
int t;
while(cin>>t)
{
int n[t][t];
queue <int> q;//x繞b
queue <int> q2;//y繞b
char c;
for(int i=0;i<t;i++)
{
for(int j=0;j<t;j++)
{
cin>>c;
if(c=='.')
{
n[i][j]=-1;
}
else n[i][j]=0;
}
}
int x,y,r=1;
//bool f=false;
vector <int> v;
vector <int> v2;
v.push_back(1),v2.push_back(1);
q.push(1),q2.push(1);
n[1][1]=1;
while(!q.empty())
{
if(n[q2.front()+1][q.front()]==-1)
{
x=q.front(),y=q2.front()+1;
bool f=true;
for(int i=0;i<v.size();i++) if(x==v[i]&&y==v2[i]){ f=false;break;}
if(f) n[y][x]=n[q2.front()][q.front()]+1,q.push(x),q2.push(y),v.push_back(x),v2.push_back(y);
}
if(n[q2.front()][q.front()+1]==-1)
{
x=q.front()+1,y=q2.front();
bool f=true;
for(int i=0;i<v.size();i++) if(x==v[i]&&y==v2[i]){ f=false;break;}
if(f) n[y][x]=n[q2.front()][q.front()]+1,q.push(x),q2.push(y),v.push_back(x),v2.push_back(y);
}
if(n[q2.front()-1][q.front()]==-1)
{
x=q.front(),y=q2.front()-1;
bool f=true;
for(int i=0;i<v.size();i++) if(x==v[i]&&y==v2[i]){ f=false;break;}
if(f) n[y][x]=n[q2.front()][q.front()]+1,q.push(x),q2.push(y),v.push_back(x),v2.push_back(y);
}
if(n[q2.front()][q.front()-1]==-1)
{
x=q.front()-1,y=q2.front();
bool f=true;
for(int i=0;i<v.size();i++) if(x==v[i]&&y==v2[i]){ f=false;break;}
if(f) n[y][x]=n[q2.front()][q.front()]+1,q.push(x),q2.push(y),v.push_back(x),v2.push_back(y);
}
//printf("now is : (%d,%d)\n\n\n",q2.front(),q.front());

q.pop();
q2.pop();
/*cout<<endl<<endl;
for(int i=0;i<t;i++)
{
for(int j=0;j<t;j++) printf("%2d ",n[i][j]);
cout<<endl;
}*/
}

if(n[t-2][t-2]==-1) cout<<"No solution!\n";
else cout<<n[t-2][t-2]<<endl;

}
}

AC (7ms, 420KB) 
 
CPP

 

 
ZeroJudge Forum