Shortest Distamce(最短路径java)
Shortest Distamce(最短路径java)
有N个节点围成一个圈,相邻两个点之间的距离已知,且每次只能移动到相邻点。然后给出M个询问,每个询问给出两个数字A和B即节点编号(1<=A,B<=N),求从A号节点到B号节点的最短距离。
输入样例:
5 1 2 4 14 9
3
1 3
2 5
4 1
输出样例:
3
10
7
代码如下:
package 算法笔记;
import java.util.Scanner;
//Shortest Distamce(最短路径)
public class test0003 {
public static void main(String [] args)
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int []a=new int[n+1];
int sum=0;
int max=100005;
int dis[]=new int[max];
for(int i=1;i<=n;i++)
{
a[i]=sc.nextInt();
sum+=a[i];
dis[i]=sum;
}
int m=sc.nextInt();
int [] left=new int[m];
int [] right=new int[m];
//int [] temp=new int[m];
for(int i=0;i<m;i++)
{
left[i]=sc.nextInt();
right[i]=sc.nextInt();
}
for(int i=0;i<m;i++)
{
if(left[i]>right[i])
{
int t=0;
t=left[i];
left[i]=right[i];
right[i]=t;
}
int temp=dis[right[i]-1]-dis[left[i]-1];
System.out.printf("%d\n",Math.min(temp, sum-temp));
}
}
}
调试结果如下: