zoukankan      html  css  js  c++  java
  • poj 3767 I Wanna Go Home

    题目分析:

                 这个题属于典型的dijkstra 算法的题;

                 n个村庄,m 条路 和两村庄之间所用时间

                  最后是各个城市所属阵营;

    题意分析:       

                  分为两个阵营,1,2城市分别属于1,2阵营(题意简单化题目)求从城市1到城市2 的最短时间

    重点:

                可以从城市1到2,反则不行:因此,在这加上判断条件,套用dijkstra算法就ok了

    #include<stdio.h>
    
    #define max 0x7fffffff
    
    int grah[601][601];
    
    int root[601];
    
    int n;
    
    void dij()
    
    {
    
    	int d[601];
    
        bool vis[601]={false};   
    
    	int i,j,pos=0;
    
    	for(i = 0;i < n; i++)
    
    		d[i] = grah[0][i];
    
    	vis[0] = true ;
    
    	for( i= 1; i <= n; i++)
    
    	{
    
    		int min=max;
    
    
    
    		for(j = 0; j < n; j++)
    
    		{
    
    			if( ! vis[j] && min > d[j])
    
    			
    
    			{
    
    				
    
    			    min=d[j];
    
    				pos = j;
    
    			}
    
    		}
    
    		vis[pos] = true;
    
    		for( j = 0;j < n ;j++)
    
    		{
    
    			if( !vis[j] && grah[pos][j] < max && !(root[pos] == 2 && root[j] == 1))
    
    			{
    
    				if(d[j] > d[pos]+ grah[pos][j])
    
    					d[j] = d[pos] + grah[pos][j];
    
    			}
    
    		}
    
    		
    
    	}
    
    	    if(d[1] < max) printf("%d\n",d[1]);
    
    		else  printf("-1\n");
    
    }
    
    int main()
    
    {
    
    //	freopen("e://1.txt","r",stdin);
    
    	int m,x,y,z,i,j;
    
    	while(scanf("%d",&n),n)
    
    	{
    
    		for(i = 0;i < n;i++)
    
    			for(j = 0;j < n;j++)
    
    			{
    
    				if(i==j) grah[i][j]=0;
    
    				else grah[i][j]=max;
    
    			}
    
    		scanf("%d",&m);
    
    		while(m--)
    
    		{
    
    			scanf("%d%d%d",&x,&y,&z);
    
    			grah[x-1][y-1]=grah[y-1][x-1]=z;
    
    		}
    
    		for(i = 0;i < n;i++)
    
    			scanf("%d",root+i);
    
             dij();
    
    	}
    
      return 0;
    
    }
    

      

  • 相关阅读:
    21班考试总结
    性别
    2019.08.20上课笔记2
    2019.08.20上课笔记3
    2019.08.20上课笔记1
    单词2
    数据类和运算符
    2019.08.14单词1
    2019.08.14上课笔记1
    request.get... getHeader 能取得的信息 参数
  • 原文地址:https://www.cnblogs.com/skyming/p/2141321.html
Copyright © 2011-2022 走看看