Which high sec system has the lowest average jump count to all of high sec

eve-online

Which high sec EVE system is the most central to high sec – or in other words, has the fewest average jumps to every other high sec system?

If possible, I would also like to know:

  • Which high sec system is most central to all other high sec regions (closest system in region)
  • Which high sec system is most central to all other high sec regions (center of each region)
  • Which high sec system is most central to all other systems
  • Which system is most central to all other systems

Info can be generated from http://community.eveonline.com/community/toolkit.asp.

Best Answer

I am not proficient in T-SQL, as any expert can assure you. That said, this information I think is correct (enough for me now anyway), but I would love to accept a better (more readable, more complete, etc) answer.

Excluding obvious island systems (low average and max jumps) manually, here are the top ten systems to base out of for rapid access to all high sec systems not in islands (106 island systems):

System      Avg Max
-------------------
Sivala      12  30
Uedama      12  31
Inaro       12  31
Kaaputenen  12  31
Kamio       12  31
Ikao        12  32
Niarja      12  32
Madirmilire 12  33
Ashab       12  34
Algogille   13  27

Below is what I ran (I called exec dbo.usp_Eve_BFS in another query). Please note that this T-SQL is hacked together from online tutorials by a T-SQL neophyte. It ran for 4:21 minutes on my machine.

CREATE PROCEDURE dbo.usp_Eve_BFS
AS
BEGIN
    SET XACT_ABORT ON
    BEGIN TRAN
    SET NOCOUNT ON;

    CREATE TABLE #Result (Id int NOT NULL PRIMARY KEY, Name nvarchar(100), Average int, Maximum int)
    INSERT INTO #Result (Id, Name) SELECT solarSystemID, solarSystemName FROM mapSolarSystems WHERE security >= 0.45

    DECLARE @StartNode int
    DECLARE c CURSOR FOR SELECT Id FROM #Result
    OPEN c
    FETCH NEXT FROM c INTO @StartNode

    WHILE @@FETCH_STATUS=0
    BEGIN
        CREATE TABLE #Discovered (Id int NOT NULL PRIMARY KEY, Parent int NULL, Depth int)
        INSERT INTO #Discovered (Id, parent, depth) VALUES (@StartNode, NULL, 0)

        WHILE @@ROWCOUNT > 0
        BEGIN
            INSERT INTO #Discovered (Id, Parent, Depth)
            SELECT toSolarSystemID, MAX(fromSolarSystemID), MIN(Depth) + 1
            FROM #Discovered d JOIN mapSolarSystemJumps ON d.Id = fromSolarSystemID
            JOIN #Result ON (mapSolarSystemJumps.toSolarSystemID = #Result.Id)
            WHERE toSolarSystemID NOT IN (SELECT Id From #Discovered)
            AND Depth = ( -- make sure the fromSolarSystemID matches the MIN(depth)!
                SELECT MIN(Depth) FROM #Discovered d JOIN mapSolarSystemJumps ON d.Id = fromSolarSystemID
                JOIN #Result ON (mapSolarSystemJumps.toSolarSystemID = #Result.Id)
                WHERE toSolarSystemID NOT IN (SELECT Id From #Discovered)
            )
            GROUP BY toSolarSystemID
        END;

        WITH BacktraceCTE(Id, Depth) AS
        (
            SELECT Id, Depth
            FROM #Discovered d
            WHERE d.Id = @StartNode
        UNION ALL
            SELECT d.Id, d.Depth
            FROM #Discovered d JOIN BacktraceCTE cte ON d.Parent = cte.Id
        )
        UPDATE #Result
        SET Average = a.Average, Maximum = a.Maximum
        FROM (SELECT AVG(Depth) AS Average, MAX(Depth) AS Maximum FROM BacktraceCTE) AS a
        WHERE #Result.Id = @StartNode

        DROP TABLE #Discovered

        FETCH NEXT FROM c INTO @StartNode
    END

    SELECT * FROM #Result ORDER BY Average, Maximum;
    DROP TABLE #Result

    COMMIT TRAN
    RETURN 0
END