#JavaScript(ES6), 10096 110
//Golfed U=l=> l.map((m,n)=>m.map(a=>a-n?c[a]=s[a][n]=1s[n][a]=s[a][n]=1:0,c=s[n]),s=l.map(m=>[])) &&s.map(a=>[~~k for(k in a)]) // Ungolfed undirect=(adList)=>( adSets=[]adSets=adList.map(_ => []), adList.forEach((curAdList,curNode)=>{ adSets[curNode] = curAdSet = adSets[curNode]||{} curAdList.forEach(adNode=>{ if (adNode!=curNode) { curAdSet[adNode]=1adSets[curNode][adNode]=1, (adSets[adNode] = neighAdSet = adSets[adNode]||{})[curNode]=1adSets[adNode][curNode]=1 } }) }), adSets.map(adSet=>[~~k for(k in adSet)]) ) // Test out=s=>OUT.innerHTML+=s+'\n' test=[ [ [], [] ] ,[ [[0]], [[]] ] ,[ [[],[0,1]] , [[1],[0]] ] ,[ [[0,1],[]] , [[1],[0]] ] ,[ [[0,1],[0],[1,0,3],[]] , [[1,2],[0,2],[0,1,3],[2]] ] ,[ [[3],[],[5],[3],[1,3],[4]] , [[3],[4],[5],[0,4],[1,3,5],[2,4]] ] ,[ [[0,1],[6],[],[3],[3],[1],[4,2]] , [[1],[0,5,6],[6],[4],[3,6],[1],[1,2,4]] ] ,[ [[6],[0,5,1],[5,4],[3,5],[4],[5,6],[0,3]] , [[1,6],[0,5],[4,5],[5,6],[2],[1,2,3,6],[0,3,5]] ] ,[ [[1,0],[5,1],[5],[1],[5,7],[7,1],[],[1]] , [[1],[0,3,5,7],[5],[1],[5,7],[1,2,4,7],[],[1,4,5]] ] ,[ [[2,8,0,9],[5,2,3,4],[0,2],[3,7,4],[8,1,2],[5,1,9,2],[6,9],[6,5,2,9,0],[9,1,2,0],[3,9]] , [[2,7,8,9],[2,3,4,5,8],[0,1,4,5,7,8],[1,4,7,9],[1,2,3,8],[1,2,7,9],[7,9],[0,2,3,5,6,9], [0,1,2,4,9],[0,3,5,6,7,8]] ] ] show=l=>'['+l.map(a=>'['+a+']').join(',')+']' test.forEach(t => ( r = U(t[0]), ck = show(r) == show(t[1]), out('Test ' + (ck ? 'OK: ':'FAIL: ') + show(t[0])+' -> ' + '\nResult: ' + show(r) + '\nCheck : ' + show(t[1]) + '\n\n') ) ) <pre id=OUT></pre>