【题解】最短路径四题
来源:互联网 发布:网络基础知识ppt 编辑:程序博客网 时间:2024/06/10 02:31
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
char zifu;
int r,c,ans;
int ch[52][52];
bool bo[52][52];
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
void dfs(int x,int y,int now)
{
//printf("(%d,%d)\n",x,y);
if(!bo[x][y])
{
printf("-1\n");
exit(0);
}
if(ans<now)
ans=now;
for(int i=0;i<4;++i)
{
int nx=x+ch[x][y]*dx[i];
int ny=y+ch[x][y]*dy[i];
if(nx<=r&&nx>=1&&ny<=c&&ny>=1&&ch[nx][ny]!=666)
{
bo[x][y]=false;
dfs(nx,ny,now+1);
bo[x][y]=true;
}
}
}
int main()
{
freopen("board.in","r",stdin);
freopen("board.out","w",stdout);
memset(bo,true,sizeof(bo));
scanf("%d%d",&r,&c);
for(int i=1;i<=r;++i)
for(int j=1;j<=c;++j)
{
cin>>zifu;
if(zifu=='H')
ch[i][j]=666;
else
ch[i][j]=(zifu-'0');
}
dfs(1,1,1);
printf("%d\n",ans);
return 0;
}
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,k,ans,all,ttt,z;
int lon;
int fa[10001];
struct hehe
{
int l,a,b;
};
hehe num[1000001];
int findf(int x)
{
if(x==fa[x])return x;
return fa[x]=findf(fa[x]);
}
int cmp(hehe c,hehe d)
{
return c.l<d.l;
}
int main()
{
freopen("outofhay.in","r",stdin);
freopen("outofhay.out","w",stdout);
scanf("%d%d",&n,&k);
for(int i=1;i<=n;++i)
fa[i]=i;
for(int j=0;j<k;++j)
{
int a,b;
scanf("%d%d",&a,&b);
scanf("%d",&lon);
num[j].l=lon;
num[j].a=a;
num[j].b=b;
}
sort(num+0,num+k,cmp);
for(int i=0;i<k;++i)
{
int ka=findf(num[i].a);
int kb=findf(num[i].b);
if(ka!=kb)
{
fa[ka]=kb;
if(ans<num[i].l)
ans=num[i].l;
}
}
printf("%d\n",ans);
return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int n,endx,endy,begx,begy;
char ch[102][102];
int lastw[102][102][3];
int head,tail;
int mapp[102][102];
int a[]={0,1,0,-1},b[]={1,0,-1,0};
struct obs
{
int x,y,turn;
};
obs d[1000000];
int main()
{
freopen("obscrs.in","r",stdin);
freopen("obscrs.out","w",stdout);
memset(mapp,127,sizeof(mapp));
memset(ch,'x',sizeof(ch));
scanf("%d",&n);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
{
cin>>ch[i][j];
if(ch[i][j]=='A')
{
begx=i;begy=j;
d[0].x=i;d[0].y=j;
d[0].turn=0;
}
if(ch[i][j]=='B')
{
endx=i;
endy=j;
}
}
mapp[begx][begy]=0;
lastw[begx][begy][1]=begx;
lastw[begx][begy][2]=begy;
while(head<=tail)
{
int xx=d[head].x;
int yy=d[head].y;
int tt=d[head].turn;
for(int i=0;i<4;++i)
{
int nx=xx+a[i];
int ny=yy+b[i];
int nt=tt;
if(ch[nx][ny]=='x')
continue;
if( abs(nx-lastw[xx][yy][1])==1 && abs(ny-lastw[xx][yy][2])==1 )
nt++;
if(nt<mapp[nx][ny])
{
++tail;
mapp[nx][ny]=nt;
d[tail].x=nx;
d[tail].y=ny;
d[tail].turn=nt;
lastw[nx][ny][1]=xx;
lastw[nx][ny][2]=yy;
}
}
++head;
}
printf("%d\n",mapp[endx][endy]);
return 0;
}
#include<iostream>
#include<cstdio>
using namespace std ;
int F,N,M,W,cnt;
struct xx
{
int a,b,v;
};
xx e[100001];
bool flag,use[505];
int que[505],dis[505];
void ins(int u,int v,int w)
{
cnt++;
e[cnt].b=v;
e[cnt].a=que[u];
que[u]=cnt;
e[cnt].v=w;
}
void insert(int u,int v,int w)
{
ins(u,v,w);
ins(v,u,w);
}
void spfa(int x)
{
use[x]=1;
for (int i=que[x];i;i=e[i].a)
if (e[i].v+dis[x]<dis[e[i].b])
{
if (use[e[i].b])
{
flag=true;
return ;
}
else
{
dis[e[i].b]=e[i].v+dis[x];
spfa(e[i].b);
}
}
use[x]=false;
}
bool jud()
{
for (int i=1;i<=N;i++)
dis[i]=use[i]=0;
flag=0;
for (int i=1;i<=N;i++)
{
spfa(i);
if (flag)
return true;
}
return 0;
}
int main()
{
freopen("wormholes.in","r",stdin);
freopen("wormholes.out","w",stdout);
cin>>F;
for (int i=0;i<F;i++)
{
cnt=0;
memset(que,0,sizeof que);
cin>>N>>M>>W;
int u,v,w;
for (int i=1;i<=M;i++)
{
cin>>u>>v>>w;
insert(u,v,w);
}
for (int i=1;i<=W;i++)
{
cin>>u>>v>>w;
ins(u,v,-w);
}
if (jud()) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
- 【题解】最短路径四题
- 最短路径变型题解法举例
- 图之四(最短路径)
- 最短路径(7)--poj1502(最短路径模板题)
- SPOJ 15. The Shortest Path 最短路径题解
- HDU 1385 Minimum Transport Cost 最短路径题解
- 最短路径(paths)题解,,,水博客
- 四、最短路径之Bellman-Ford与SPFA
- 四种常用最短路径算法模板
- 四种常用最短路径算法模板
- 数据结构图之四(最短路径--迪杰斯特拉算法)
- 数据结构图之四(最短路径--弗洛伊德算法)
- 街区最短路径问题 规律题
- 动物园查找最短路径题
- 【训练题】最短路径树 SPFA
- 最短路径题集1
- 最短路径题集2
- poj 3268一道最短路径题
- 用Gvim建立IDE编程环境 (Windows篇)
- 【题解】cooking
- exit和return的区别
- 代码的抽象三原则
- Bartender打印和导出图片
- 【题解】最短路径四题
- 设计模式中类的关系
- 【转载】树状数组(简单)
- 上一个十年,下一个十年
- 【kuandui】二叉堆
- 对付内存改写问题的银弹
- 【最短路径】Floyd算法
- MIPS架构培训之Cache原理
- 【转载】最小生成树