随笔 - 87  文章 - 279  trackbacks - 0
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

潜心看书研究!

常用链接

留言簿(19)

随笔分类(81)

文章分类(89)

相册

ACM OJ

My friends

搜索

  •  

积分与排名

  • 积分 - 212102
  • 排名 - 116

最新评论

阅读排行榜

评论排行榜

原来是这样的, 每次从候选集合dist选取一个加入set中, 然后调整候选集, 使其满足, d[u] 为起点经过set里面的点到达u的最短路径。

这是我理解写的从1->n的dijkstra程序:

struct  COSTDATA
{
    
int  q;
    
int  visit;
}
;

int  dijkstra( int  n)
{
    
int  i, j, u, min;
    COSTDATA dist[MAXN];
    
int   set [MAXN];
    
int  setNum;
    
set [ 1 =   1 ; dist[ 1 ].visit  =   - 1 ; dist[ 1 ].q  =   0 ;
    setNum 
=   1 ;
    
for  (i = 2 ; i <= n; i ++ )
    
{
        dist[i].q 
=  g[ 1 ][i];
        dist[i].visit 
=   0 ;
    }

    
while  (setNum  <  n)
    
{
        min 
=  MAXNUM;
        
for  (i = 1 ; i <= n; i ++ )
        
{
            
            
if  (min  >  dist[i].q  &&  dist[i].visit  !=   - 1 )
            
{
                u 
=  i;
                min 
=  dist[i].q;
            }

        }
    
        dist[u].visit 
=   - 1 ;
        
set [ ++ setNum]  =  u;
        
for  (i = 1 ; i <= n; i ++ )
        
{
            
if  (dist[i].visit  !=   - 1   &&  dist[i].q  >  dist[u].q + g[u][i])
            
{
                dist[i].q 
=  dist[u].q + g[u][i];
            }

        }
    
    }

    
return  dist[n].q;
}

 我再根据wy的代码,再优化了一下, 以下是任意两点的最短路径程序:

/*
 *    beg : 起点;
 *  end : 终点;
 *  n : 顶点个数;
 *  g : 邻接矩阵, 为全局变量, 下标(1, 1)起;
 
*/


int  dijkstra( int  beg,  int  end,  int  n)
{
    
int  i, j, u, min;
    
int   * dist  =   new   int [n + 1 ];
    
int   * visit  =   new   int [n + 1 ];

    
for  (i = 1 ; i <= n; i ++ )
    
{
        dist[i] 
=  MAXNUM;
        visit[i] 
=   false ;
    }


    dist[beg] 
=   0 ;
    
for  (i = 0 ; i < n; i ++ )
    
{
        min 
=  MAXNUM;
        
for  (j = 1 ; j <= n; j ++ )
        
{    
            
if  (min  >  dist[j]  &&   ! visit[j])
            
{
                u 
=  j;
                min 
=  dist[j];
            }

        }

        
if  (min  ==  MAXNUM)  break ;
        visit[u] 
=   true ;
        
for  (j = 1 ; j <= n; j ++ )
        
{
            
if  ( ! visit[j]  &&  dist[j]  >  dist[u] + g[u][j])
            
{
                dist[j] 
=  dist[u] + g[u][j];
            }

        }

        
if  (u  ==  end)  break ;        
    }


    
return  dist[end];
}
posted @ 2006-08-09 14:51 豪 阅读(1533) | 评论 (1)编辑 收藏

狂鄙视物理实验的老师!~

我每次实验都是做得那么认真,每次实验报告都是认认真真的做完的。连一大堆人拿4,50分的物理绪论,我都拿了85,怎么总评就给我60???

我敢肯定是这些老师工作的认真问题,你们不会漏掉了我一两次实验的成绩吧?~

这些老师,就只会拿工资,你们到底对不对学生负责的,你们良心过得去吗?

哼,60就60,鄙视你们!~

不要影响我的心情,我明天还要考好工图的,我绝对相信工图的老师是个认真负责的老师,他是我大学见过的老师最负责的老师了,在这里要赞他一个!~

PS:工图加油!~

posted @ 2006-07-03 17:31 豪 阅读(277) | 评论 (3)编辑 收藏

被我藏起来的显示器又搬出来了,无办法啦,为了看离散,和工图的课件。

最近的主题就是复习,考试。大学就是这样,每逢期末,都是一片努力的景象。最恐怖的就是自习室了,那些平时都不被光顾的桌子早就爆满了,或者说被预订了(用书占位置,晕,好象已经成为一种风气了),没办法啦,我也只好跟形势了。其实过去教室自习的确是会有学习的氛围的,效率也高很多,但是对于我来说,更重要的是,教室有空调啊,空调,这几天热死了!

唉,在华工搞acm就是郁闷,学校不重视,没组织。不只是你努力就可以的,还要考虑组队。xp的退出了,队伍要重组,要考虑的因数很多,唉,就当是给自己的一次考验啦,要勇于面对,不想像高中的时候那么容易就放弃。

先什么都不想了,复习复习!

posted @ 2006-06-24 22:40 豪 阅读(233) | 评论 (0)编辑 收藏

Crossed ladders
Time Limit:1000MS  Memory Limit:65536K
Total Submit:1837 Accepted:605

Description
A narrow street is lined with tall buildings. An x foot long ladder is rested at the base of the building on the right side of the street and leans on the building on the left side. A y foot long ladder is rested at the base of the building on the left side of the street and leans on the building on the right side. The point where the two ladders cross is exactly c feet from the ground. How wide is the street?

Input
Each line of input contains three positive floating point numbers giving the values of x, y, and c.

Output
For each line of input, output one line with a floating point number giving the width of the street in feet, with three decimal digits in the fraction.

Sample Input

30 40 10
12.619429 8.163332 3
10 10 3
10 10 1

Sample Output

26.033
7.000
8.000
9.798

Source
The UofA Local 2000.10.14

My Code:

#include  < iostream >
#include 
< algorithm >
#include 
< cmath >
#include 
< iomanip >
using   namespace  std;

void  round( double  x,  double  y,  double  h) 
{
    
double  s1, s2, s;
    
double  t, beg, end;
    
if  (x  ==  y)  {
        s 
=  sqrt(x * x - 4 * h * h);
    }
  else   {
        
if  (y  <  x)  {
            swap(x, y);
        }

        beg 
=   0 ;
        end 
=  x;
        s 
=  (beg  +  end)  /   2 ;
        t 
=   1   /  sqrt(x * x - s * s)  +   1   /  sqrt(y * y - s * s);
        
while  (fabs(t - 1 / h) > 0.000000001 {
            
if  (t  <   1 / h)  {
                beg 
=  s;
                s 
=  (beg  +  end)  /   2 ;
            }
  else   if  (t  >   1 / h)  {
                end 
=  s;
                s 
=  (beg  +  end)  /   2 ;
            }
  else   {
                
break ;
            }

            t 
=   1   /  sqrt(x * x - s * s)  +   1   /  sqrt(y * y - s * s);
        }

    }

    cout 
<<  setiosflags(ios:: fixed <<  setprecision( 3 <<  s  <<  endl;
}


int  main() 

    
double  x, y, h;
    
while  (cin  >>  x  >>  y  >>  h)  {
        round(x, y, h);
    }

    
return   0 ;
}

posted @ 2006-05-08 21:24 豪 阅读(706) | 评论 (0)编辑 收藏

华工的ACM组织, 太令我失望了。

前几天, 得知这个月在PKU上RUSH的Morning师兄不能够去参加省赛, 心感不平。 Morning的努力就这样被忽视了? 为什么我们去参赛的队伍就只能是五支? 难道这不是学校的重视程度问题吗? 虽然我刚好坐上的省赛的尾班车, 但是, 这样的重视程度, 我们学校的ACM怎么都搞不起来的。

真不懂, 那老师在两次讲座都口口声声说要重视ACM,  可是都只是空口说白话, 每次都叫继续做题,继续做题, 可是我们连一个正式的环境都没有, 没有组织, 没有集训队, 没有在线题库, 没有支持。

这几天看了HIT几个ACMer的blog,  颇有感触, 看到那几个牛不但自己在努力, 而且还在没有学校的支持下, 自己组织起了培训班, 把他们学校的人带起来, 此等行为,此等精神着实另人敬佩。

好想学校能重视ACM, 有个让我们ACMer奋斗的环境。。好想, 好想。。

师兄们, 能搞个集训班出来吗? 即使学校不支持, 但我们可以去争取, 让那些两耳不闻窗外事的领导看到我们的成绩, 如果要搞集训班, 我会贡献自己绵薄之力的。

最后, 我还是希望, 华工的ACMer们, 不要放弃, 即使受到了挫折,  让我们在ACM的路上, 在那WA与AC的痛苦和狂喜中,  感受着数据结构的神奇, 享受着算法的优美,  寻找到CS的乐趣,。
 
Morning师兄, 继续努力啊, 我还要向你看齐的,   不要放弃, Let's fight on!!

posted @ 2006-04-26 12:50 豪 阅读(569) | 评论 (4)编辑 收藏
仅列出标题
共18页: First 7 8 9 10 11 12 13 14 15 Last