Re: 762 - We Ship Cheap
Posted: Fri Mar 14, 2014 8:57 am
I got the RTE.Please help me.I had test the city AA to ZZ. There are 26*26 cities.
#include<iostream>
#include<fstream>
#include<string>
#include<queue>
#include<stack>
using namespace std;
string city_num[700];
int num_total_city;
bool m[700][700],inside,findend=0;
queue<int> q;
stack<string> p;
int father[700],from_num,to_num;
int searching(string s){
int i;
for(i=0;i<num_total_city;i++){
if(city_num==s){
return i;
}
}
return -1;
}
void bfs(int i){
int j;
if(i<0) return;
for(j=0;j<num_total_city;j++){
if(m[j]){
if(father[j]==-1) father[j]=i;
if(j==to_num){
findend=true;
return;
}
q.push(j);
m[j]=false;
}
}
while(!q.empty()){
i=q.front();
for(j=0;j<num_total_city;j++){
if(m[j]){
if(father[j]==-1) father[j]=i;
if(j==to_num){
findend=true;
return;
}
q.push(j);
m[j]=false;
}
}
q.pop();
}
}
int main()
{
ifstream fin;
fin.open("7.txt");
istream& input(cin);
ofstream fout;
fout.open("5.txt");
int i,j,num1,num2,n;
string city[1400],from,to;
char x;
while(input>>n){
for(i=0;i<700;i++){
for(j=0;j<700;j++){
m[j]=false;
}
}
while(!p.empty()) p.pop();
while(!q.empty()) q.pop();
findend=false;
for(i=0;i<700;i++){
city_num="";
father=-1;
}
for(i=0;i<1400;i++){
city="";
}
for(i=0;i<n*2;i++){
input>>city;
}
input>>from>>to;
num_total_city=0;
for(i=0;i<n*2;i++){
inside=false;
for(j=0;j<num_total_city;j++){
if(city[i]==city_num[j]){
inside=true;
}
}
if(!inside){
city_num[num_total_city]=city[i];
num_total_city++;
}
}
for(i=0;i<n*2;i=i+2){
num1=searching(city[i]);
num2=searching(city[i+1]);
m[num1][num2]=true;
m[num2][num1]=true;
}
/*for(i=0;i<num_total_city;i++){
for(j=0;j<num_total_city;j++){
fout<<m[i][j];
}
fout<<endl;
}*/
from_num=searching(from);
to_num=searching(to);
bfs(from_num);
p.push(to);
i=to_num;
while(father[i]!=-1){
i=father[i];
p.push(city_num[i]);
}
//p.push(from);
if(!findend&&to!=from){
cout<<"No route"<<endl;
}
if(findend){
while(!p.empty()){
cout<<p.top()<<" ";
p.pop();
cout<<p.top()<<endl;
if(p.size()==1) break;
}
}
cout<<endl;
}
return 0;
}
#include<iostream>
#include<fstream>
#include<string>
#include<queue>
#include<stack>
using namespace std;
string city_num[700];
int num_total_city;
bool m[700][700],inside,findend=0;
queue<int> q;
stack<string> p;
int father[700],from_num,to_num;
int searching(string s){
int i;
for(i=0;i<num_total_city;i++){
if(city_num==s){
return i;
}
}
return -1;
}
void bfs(int i){
int j;
if(i<0) return;
for(j=0;j<num_total_city;j++){
if(m[j]){
if(father[j]==-1) father[j]=i;
if(j==to_num){
findend=true;
return;
}
q.push(j);
m[j]=false;
}
}
while(!q.empty()){
i=q.front();
for(j=0;j<num_total_city;j++){
if(m[j]){
if(father[j]==-1) father[j]=i;
if(j==to_num){
findend=true;
return;
}
q.push(j);
m[j]=false;
}
}
q.pop();
}
}
int main()
{
ifstream fin;
fin.open("7.txt");
istream& input(cin);
ofstream fout;
fout.open("5.txt");
int i,j,num1,num2,n;
string city[1400],from,to;
char x;
while(input>>n){
for(i=0;i<700;i++){
for(j=0;j<700;j++){
m[j]=false;
}
}
while(!p.empty()) p.pop();
while(!q.empty()) q.pop();
findend=false;
for(i=0;i<700;i++){
city_num="";
father=-1;
}
for(i=0;i<1400;i++){
city="";
}
for(i=0;i<n*2;i++){
input>>city;
}
input>>from>>to;
num_total_city=0;
for(i=0;i<n*2;i++){
inside=false;
for(j=0;j<num_total_city;j++){
if(city[i]==city_num[j]){
inside=true;
}
}
if(!inside){
city_num[num_total_city]=city[i];
num_total_city++;
}
}
for(i=0;i<n*2;i=i+2){
num1=searching(city[i]);
num2=searching(city[i+1]);
m[num1][num2]=true;
m[num2][num1]=true;
}
/*for(i=0;i<num_total_city;i++){
for(j=0;j<num_total_city;j++){
fout<<m[i][j];
}
fout<<endl;
}*/
from_num=searching(from);
to_num=searching(to);
bfs(from_num);
p.push(to);
i=to_num;
while(father[i]!=-1){
i=father[i];
p.push(city_num[i]);
}
//p.push(from);
if(!findend&&to!=from){
cout<<"No route"<<endl;
}
if(findend){
while(!p.empty()){
cout<<p.top()<<" ";
p.pop();
cout<<p.top()<<endl;
if(p.size()==1) break;
}
}
cout<<endl;
}
return 0;
}