Newguy


私信TA

用户名:772007765

访问量:82108

签 名:

已秃人士

等  级
排  名 28
经  验 14598
参赛次数 3
文章发表 92
年  龄 0
在职情况 在职
学  校
专  业

  自我简介:

解题思路:




import java.util.*;   //Dijksdra
  
public class Main  {
	static int[][] dis;
	static int[] minDis;
	static int N;
	public static void Dijksdra(int src) {
		int[] vis = new int[N+1];
		for (int i = 1; i <= N; i++)
			minDis[i] = Integer.MAX_VALUE;
		minDis[src] = 0;
		for (int i = 1; i <= N; i++) {
			int u = -1;
			for (int j = 1; j <= N; j++)
				if (vis[j] == 0 && (u == -1 || minDis[u] > minDis[j])) u = j;
			vis[u] = 1;
			for (int j = 1; j <= N; j++) {
				if (vis[j] == 0 && dis[u][j] != 0 && minDis[u] != Integer.MAX_VALUE)
					minDis[j] = Math.min(minDis[u] + dis[u][j], minDis[j]);
			}
		}
	}
	
    public static void main(String args[]){  
    	Scanner input = new Scanner(System.in);
        N = input.nextInt();    //国家数
        int K = input.nextInt();    //文化数
        int M = input.nextInt();	//道路数
        int S = input.nextInt();	//起点
        int T = input.nextInt();	//终点
        int[] culture = new int[N+1];
        for (int i = 1; i <= N; i++)
        	culture[i] = input.nextInt();
        int[][] isreject = new int[K+1][K+1]; 
        for (int i = 1; i <= K; i++)
        	for (int j = 1; j <= K; j++)
        		isreject[i][j] = input.nextInt();   //文化i是否排斥j
        dis = new int[N+1][N+1];
        minDis = new int[N+1];
        for (int i = 1; i <= M; i++) {
        	int l = input.nextInt();
        	int r = input.nextInt();
        	int d = input.nextInt();
        	//判断两个国家之间文化是否排斥
        	if (isreject[culture[r]][culture[l]] == 0) {
        		if (dis[l][r] != 0)
        			dis[l][r] = Math.min(dis[l][r], d);
        		else
        			dis[l][r] = d;
        	}
        	if (isreject[culture[l]][culture[r]] == 0) {
        		if (dis[r][l] != 0)
        			dis[r][l] = Math.min(dis[r][l], d);
        		else
        			dis[r][l] = d;
        	}
        }
        Dijksdra(S);
        if (minDis[T] != Integer.MAX_VALUE)
        	System.out.println(minDis[T]);
        else
        	System.out.println(-1);
    }  
}

注意事项:





参考代码:

 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区

假设有三个国家的文化A,B,C
如果我学习了A,然后又学习了B,但是C和B不冲突,但是C和A冲突,这里是不是没有考虑这种情况呢
2019-03-22 15:02:31
厉害厉害
2019-03-22 14:41:49
  • «
  • 1
  • »