Problem : 1142 ( A Walk Through the Forest ) 始终无法AC

SimonHu-real 2018-03-08 06:55:01
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=1142


import java.io.BufferedInputStream;
import java.util.Arrays;
import java.util.Scanner;


public class Main {
public static int dp[];
public static int dis[];
public static int vis[];
public static int map[][];
public static int vsum,road;
public static int INF=0x7fffffff;
public static int N=1010;
public static void dj(int start)//地杰斯特拉
{
int i,j,k=0;
Arrays.fill(vis, 0);
for(i=1;i<=vsum;i++)
dis[i]=map[start][i];
dis[start]=0;
vis[start]=1;
for(i=1;i<=vsum;i++)
{
int temp=INF;
for(j=1;j<=vsum;j++)
{
if(vis[j]!=1&&dis[j]<temp)
{temp=dis[k=j];break;}
}
if(temp==INF) break;
vis[k]=1;
for(j=1;j<=vsum;j++)
{
if(vis[j]!=1&&dis[j]>dis[k]+map[k][j])
dis[j]=dis[k]+map[k][j];
}
}
}
public static int dfs(int v)
{
if(v==2) return 1;
if(dp[v]!=-1) return dp[v];
int sum=0;
for(int i=1;i<=vsum;i++)
{
if(map[v][i]!=INF&&dis[v]>dis[i])
sum+=dfs(i);
}
dp[v]=sum;
return dp[v];

}
public static void main(String args[]) {
Scanner in=new Scanner(new BufferedInputStream(System.in));
while(in.hasNext())
{
vsum=in.nextInt();
if(vsum==0)break;
road=in.nextInt();
dis=new int[vsum+1];
dp=new int[vsum+1];
vis=new int[vsum+1];
map=new int[vsum+1][vsum+1];
int i,j;
for(i=1;i<=vsum;i++)
for(j=1;j<=vsum;j++)
map[i][j]=(i==j?0:INF);
Arrays.fill(dp,-1);
int u,v,w;
for(i=1;i<=road;i++)
{
u=in.nextInt();v=in.nextInt();w=in.nextInt();

map[u][v]=w;map[v][u]=w;
}
dj(2);
System.out.println(dfs(1));
}
}
}


这是我用C++的代码改为JAVA的,C++ AC了,但是JAVA死活过不去。求大神帮忙看看
...全文
431 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧