Filter löschen
Filter löschen

how can fix this error of this code?

2 Ansichten (letzte 30 Tage)
yaznp aldhyani
yaznp aldhyani am 10 Mai 2023
Beantwortet: Aman am 29 Mai 2023
names = {'1' '2' '3' '4' '5' '6' '7' '8' 'A' 'B' 'C'};
A1=[1 0 0 0 5 0 0 5 0 0 0; ...
0 1 0 0 0 0 5 5 0 0 0; ...
0 0 1 10 5 0 0 0 0 0 0;...
0 0 10 1 0 0 3 0 0 0 0;...
5 0 5 0 1 0 0 0 1 0 0; ...
0 0 0 0 0 1 0 5 0 1 0;...
0 5 0 3 0 0 1 0 0 0 1;...
5 5 0 0 0 5 0 1 0 0 0;...
0 0 0 0 1 0 0 0 1 0 0;...
0 0 0 0 0 1 0 0 0 1 0;...
0 0 0 0 0 0 1 0 0 0 1];
% Initialize variables
start_node = names == 'A'; % index of starting node
end_nodes = names == 'B' | names == 'C'; % indices of ending nodes
distances = Inf(size(names)); % initialize distances to infinity
distances(start_node) = zeros(1); % distance from start node to itself is zero
visited = false(size(names)); % initialize visited array to false
% Run Dijkstra's algorithm
while ~all(visited(end_nodes))
% Find unvisited node with smallest tentative distance
[~, current_node] = min(distances(~visited));
% Mark current node as visited
visited(current_node) = true;
% Update distances for neighbors of current node
for neighbor = find(A1(current_node,:))
if ~visited(neighbor)
new_distance = distances(current_node) + A1(current_node,neighbor);
if new_distance < distances(neighbor)
distances(neighbor) = new_distance;
end
end
end
end
% Print shortest distances to ending nodes
fprintf('Shortest distances to ending nodes:\n');
for i = find(end_nodes)
fprintf('%s: %d\n', names{i}, distances(i));
end
% Find shortest path to B and C
if distances(names == 'B') < distances(names == 'C')
shortest_path = {'A' 'B'};
else
shortest_path = {'A' 'C'};
end
% Print shortest path
fprintf('Shortest path: %s', shortest_path{1});
for i = 2:length(shortest_path)
fprintf(' -> %s', shortest_path{i});
end
fprintf('\n');
this is error
start_node = names == 'A'; % index of starting node
Error: Incorrect use of '=' operator. To assign a value to a variable, use '='. To compare values for equality,
use '=='.

Antworten (1)

Aman
Aman am 29 Mai 2023
Hi there,
In the line,
start_node = names == 'A';
You are trying to use '==' operator on names which is a cell array and cell arrays do not support '==' operations. Since names only contains character data type, so you can define them using array as follow:
names = ['1' '2' '3' '4' '5' '6' '7' '8' 'A' 'B' 'C'];
Hope it helps!

Tags

Produkte


Version

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by