所以我有以下贪婪算法,它给出了以下错误:
游乐场执行中止:错误:执行被中断, 原因:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)。该 进程已被中断,使用 “thread return -x”返回表达式之前的状态 评价。
类别:
// This class represents an undirected graph using adjacency list
public class Graph{
var V: Int // number of vertices
var adj: [[Int]] = [[]] //Adjacency List
public init(v: Int) {
V = v
adj = [[Int]](repeating: [], count: v)
}
// Function to add an edge into the graph
public func addEdge(v: Int, w: Int){
adj[v].append(w)
adj[w].append(v) // Graph is undirected
}
// Assigns colors (starting from 0) to all vertices and
// prints the assignment of colors
public func greedyColoring() {
var result = [Int]()
//Assign the first color to first vertex
result[0] = 0
//Initialize the remaining V-1 vertices as unassigned
for i in 0 ..< V{
//No Color is assigned
result[i] = -1
}
// A temporary array to store the available colors. True
// value of available[cr] would mean that the color cr is
// assigned to one of its adjacent vertices
var available = [Bool]()
for cr in 0 ..< V{
available[cr] = false
}
// Assign colors to remaining V-1 vertices
for i in 1 ..< V{
//Process all adjacent vertices and flag their colors as unavailable
for un in 0 ..< adj[i].count{
if result[un] != -1 {
available[result[un]] = true
}
}
//find the first available color
for cr in 0 ..< V{
if available[cr] == false{
result[i] = cr
break
}
}
//Reset the values back to false for the next iteraation
for un in 0 ..< adj[i].count{
if result[un] != -1 {
available[result[un]] = true
}
}
}
//Print result
for r in 0 ..< V{
print("Vertex \(r) --> Color \(result[r])")
}
}
}
我称之为:
import Foundation
import UIKit
import XCPlayground
var g1 = Graph(v: 5)
g1.addEdge(v: 0, w: 1)
g1.addEdge(v: 0, w: 2)
g1.addEdge(v: 1, w: 2)
g1.addEdge(v: 1, w: 3)
g1.addEdge(v: 2, w: 3)
g1.addEdge(v: 3, w: 4)
g1.greedyColoring() // Fails HERE
所以我之前在某些行中遇到过这个错误,这与我如何使用数组有关。为什么playground没有给出像index out of bounds or so?
这样的确切错误我的调试控制台什么都不打印...导致我的代码出错的原因是什么?
答案 0 :(得分:2)
在此代码段中:
var result = [Int]()
//Assign the first color to first vertex
result[0] = 0
数组result
为空,因此您无法通过result[0]
访问第一个元素。
<强>解决方案:强>
更改自:
var result = [Int]()
//Assign the first color to first vertex
result[0] = 0
//Initialize the remaining V-1 vertices as unassigned
for i in 0 ..< V{
//No Color is assigned
result[i] = -1
}
// A temporary array to store the available colors. True
// value of available[cr] would mean that the color cr is
// assigned to one of its adjacent vertices
var available = [Bool]()
for cr in 0 ..< V{
available[cr] = false
}
要:
var result = [Int]()
//Assign the first color to first vertex
result.append(0)
//Initialize the remaining V-1 vertices as unassigned
for _ in 0 ..< V{
//No Color is assigned
result.append(-1)
}
// A temporary array to store the available colors. True
// value of available[cr] would mean that the color cr is
// assigned to one of its adjacent vertices
var available = [Bool]()
for _ in 0 ..< V{
available.append(false)
}
答案 1 :(得分:1)
只需写:
import PlaygroundSupport
对我有帮助