求助,该怎么规避VC的种种语法问题
  • 板块学术版
  • 楼主QDHSLGYYJK
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/12/8 14:36
  • 上次更新2023/11/5 06:25:21
查看原帖
求助,该怎么规避VC的种种语法问题
376467
QDHSLGYYJK楼主2020/12/8 14:36

如题,学校使用VC6.0,结果我发现Dev c++能通过的语法,VC不能。 以最短路为例。

#include<bits/stdc++.h>//不能使用万能头文件,必须手打

const int MaxN = 100010, MaxM = 500010;

struct edge
{
    int to, dis, next;
};

edge e[MaxM];
int head[MaxN], dis[MaxN], cnt;
bool vis[MaxN];
int n, m, s;

inline void add_edge( int u, int v, int d )
{
    cnt++;
    e[cnt].dis = d;
    e[cnt].to = v;
    e[cnt].next = head[u];
    head[u] = cnt;
}

struct node
{
    int dis;
    int pos;
    bool operator <( const node &x )const
    {
        return x.dis < dis;
    }
};

std::priority_queue<node> q;


inline void dijkstra()
{
    dis[s] = 0;
    q.push( ( node ){0, s} );//不能这么写
    while( !q.empty() )
    {
        node tmp = q.top();
        q.pop();
        int x = tmp.pos, d = tmp.dis;
        if( vis[x] )
            continue;
        vis[x] = 1;
        for( int i = head[x]; i; i = e[i].next )
        {
            int y = e[i].to;
            if( dis[y] > dis[x] + e[i].dis )
            {
                dis[y] = dis[x] + e[i].dis;
                if( !vis[y] )
                {
                    q.push( ( node ){dis[y], y} );
                }
            }
        }
    }
}


int main()
{
    scanf( "%d%d%d", &n, &m, &s );
    for(int i = 1; i <= n; ++i)dis[i] = 0x7fffffff;
    for( register int i = 0; i < m; ++i )//显示i重复定义
    {
        register int u, v, d;
        scanf( "%d%d%d", &u, &v, &d );
        add_edge( u, v, d );
    }
    dijkstra();
    for( int i = 1; i <= n; i++ )//同上
        printf( "%d ", dis[i] );
    return 0;
}
2020/12/8 14:36
加载中...