您的位置:首页 > 其它

1032. Sharing (25)

2015-02-02 16:04 323 查看
点击打开链接

这次用map来存放节点,first是其地址,second是no里面有访问次数visit和next

开始将vist都置为0,然后按照第一个开始的节点地址开始访问,用map中的find找下一节点,使其visit++,直到结束,结束的标志就是iteratoe找不到为止,而不是next为-1

再按照第二个地址开始访问,如果其visit为1表示已经访问过,则该节点为common

但是有1点没过!!!!

#include <stdio.h>
#include <map>
using namespace std;
struct no{
int next;
int visit;
};
map<int,no> mp;
int main(){
freopen("in.txt","r",stdin);
int s,e,n;
while(scanf("%d %d %d",&s,&e,&n)!=EOF){
for(int i=0;i<n;i++){
int a,b;
char c;
scanf("%d %c %d",&a,&c,&b);
no tmp;
tmp.next=b;
tmp.visit=0;
mp[a]=tmp;
}
map<int,no>::iterator it=mp.find(s);
while(it!=mp.end()){
it->second.visit++;
it=mp.find(it->second.next);
}
it=mp.find(e);
int ans=-1;
while(it!=mp.end()){
if(it->second.visit==1){
ans=it->first;
break;
}else{
it->second.visit++;
it=mp.find(it->second.next);
}
}
if(ans==-1){
printf("-1\n");
}else{
printf("%d\n",ans);
}

}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: